将int数组的成员传递给printf会导致C中的Segmentation Fault

时间:2013-12-30 12:26:13

标签: c arrays segmentation-fault

以下是我正在使用的代码:

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 %x\t"\
    "%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n",
    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]);

它出了什么问题?

1 个答案:

答案 0 :(得分:2)

您指向指向fread

的指针
fread(&r, 1, 16, f);

这应该是

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