gpt4 book ai didi

c - 没有定义未使用数组的段错误

转载 作者:IT王子 更新时间:2023-10-29 01:08:32 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的程序,以 16 位 block 的形式以十六进制输出二进制文件(Game Boy ROM)的前 16 KB。然而,在 for 循环期间,我的程序总是会发生段错误,但它总是在数组中的不同点发生段错误。这是代码:

#include <stdio.h>
#include <stdint.h>

int main ()
{
uint16_t buffer[8000];
FILE* ROM = fopen("rom.gb", "rb");
if (ROM == NULL)
{
printf("Error");
fclose(ROM);
return 1;
}
fread(buffer, sizeof(buffer), 1, ROM);
int i;
for(i = 0; i < sizeof(buffer); ++i)
{
if (buffer[i] < 16)
{
printf("000%x ", buffer[i]);
}
else if (buffer[i] < 256)
{
printf("00%x ", buffer[i]);
}
else if (buffer[i] < 4096)
{
printf("0%x ", buffer[i]);
}
else
{
printf("%x ", buffer[i]);
}
}
fclose(ROM);
return 0;
}

在我改为使用 uint16_t 而不是 char 之前(因为 Game Boy 有 16 位地址空间)这并没有发生,事实上如果我包含声明

unsigned char buffer2[16000]; 

在第一个缓冲区的声明旁边,我得到了预期的输出。所以我的问题是,为什么添加一个未使用的变量会阻止程序出现段错误?我怎样才能避免必须这样做并声明一个在程序中完全未使用的巨大数组?

最佳答案

在这一行中:

for(i = 0; i < sizeof(buffer); ++i)

sizeof(buffer)是以字节为单位的数组大小,如果你想要元素的数量使用

i < (sizeof(buffer) / sizeof(buffer[0]))

关于c - 没有定义未使用数组的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27778726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com