将 int 数组的成员传递给 printf 会导致 C 中的分段错误



这是我使用的代码:

unsigned int* r;
// [snip]
r=(unsigned int *) malloc(filesize*sizeof(unsigned int));
for (pos=0;pos<max;pos++) {
  fread(&r, 1, 16, f);
  printf(
    "%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %xt"
    "%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %cn",
    r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13], r[14], r[15],
    (char)r[0], (char)r[1], (char)r[2], (char)r[3], (char)r[4], (char)r[5], (char)r[6], (char)r[7], (char)r[8], (char)r[9], (char)r[10], (char)r[11], (char)r[12], (char)r[13], (char)r[14], (char)r[15]
  );
}
fclose(f);

下面是 gdb 输出:

Program received signal SIGSEGV, Segmentation fault.
0x08048650 in main (argc=1, argv=0xbffff3c4) at binread.c:27
27          (char)r[0],(char)r[1],(char)r[2],(char)r[3],(char)r[4],(char)r[5],(char)r[6],(char)r[7],(char)r[8],(char)r[9],(char)r[10],(char)r[11],(char)r[12],(char)r[13],(char)r[14],(char)r[15]);

它有什么问题?

你提供一个指向fread的指针

fread(&r, 1, 16, f);

这应该是

fread(r, sizeof(int), 16, f);

相关内容

  • 没有找到相关文章

最新更新