我正在实现一个环缓冲区,并且在一个方法中,我正在从循环中的文件读取CHUNKSIZE
个字节,并将指针插入到环缓冲区中。Calloc导致段错误,但不是malloc
我正在做一个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);
}
'CHUNKSIZE'的价值是什么? deposit()对b指向的缓冲区有什么作用?请注意,由于您从未释放b,因此这是一个大内存泄漏。 – Jens
很可能你的错误在其他地方,也许在'deposit'里面。无论如何,你没有向我们展示足够的话语。但是,那么这种类型的问题对于SO来说也不是很合适,这不是一个代码评论网站,而是一个技术问答网站。 –
我怀疑calloc正在擦掉一个指针,malloc离开了。 – kdubs