给定以下是在二进制文件中存储随机整数的代码。二进制文件的大小应该是65536字节,所以我必须生成总共16634个整数,然后一次保存16个整数。这已在 populateBackingStore()函数中实现。 这里的问题是分段错误发生在“有时”在行:
buffer [i%16] = rand () % MAX_INT;.
注意:出于调试目的,我打印了迭代编号,我发现分段错误只发生在 16358th迭代 。
#include <stdio.h>
#define BACKING_STORE 65536
#define MAX_INT 42949678295
int populateBackingStore () {
FILE * backingStore = fopen ("BACKING_STORE.bin", "wb");
int num, i;
int * buffer = (int* ) malloc (16); // 64 * (4 bytes) = 256 bytes
if (backingStore == NULL) {
printf ("Error while creating file BACKING_STORE.bin\n");
return NULL;
}
srand (time (NULL));
for (i = 0; i < BACKING_STORE/sizeof (int) ;i ++) {
buffer [i%16] = rand () % MAX_INT;
if ( i % 16 == 0 ) {
fwrite (buffer, sizeof (int), 16, backingStore);
}
printf ("%d ", i);
}
fclose (backingStore);
}
int main () {
populateBackingStore ();
return 0;
}
答案 0 :(得分:7)
int * buffer = (int* ) malloc (16);
您没有为16
int
分配足够的空间。你正在分配16个字节。
更改为
int * buffer = malloc (16 * sizeof (*buffer));
相关阅读:
malloc()
man page。malloc()
的返回值。