我正在实现一个环形缓冲区,在一种方法中,我在循环中从文件中读取 CHUNKSIZE
字节,并将指针插入到环形缓冲区中。
我在 while 循环中执行此操作。该代码使用 malloc
可以正常工作,但 calloc
会在循环结束时导致段错误。这实在是太神秘了。
这是代码:
fpos_t position = 0;
fpos_t file_size = 0;
fseek(file, 0L, SEEK_END);
fgetpos(file,&file_size);
fseek(file, 0L, SEEK_SET);
char* b = calloc(CHUNKSIZE,sizeof(char));
// char* b = malloc(sizeof(char)*CHUNKSIZE);
while(fread(b,1,CHUNKSIZE,file)){
deposit(reader_buf,b);
// This always changes the cursor position by -150 to create overlapping chunks
fseek(file,-150,SEEK_CUR);
b = calloc(CHUNKSIZE,sizeof(char));
// b = malloc(sizeof(char)*CHUNKSIZE);
}
最佳答案
malloc
和 calloc
之间的唯一区别是 calloc
将内存初始化为 0,而 malloc
则不会不初始化它。
因此,错误可能是您正在访问某处的某些数据,这些数据被 calloc
用 0 覆盖。我建议您检查 b
缓冲区或其他一些动态分配的数据的生命周期。
关于Calloc 会导致段错误,但不会导致 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13990532/