[英]Calloc causes segfault but not malloc
我正在實現一個ringbuffer,在一個方法中,我從循環中的文件中讀取CHUNKSIZE
字節,並將指針插入到ringbuffer中。
我在一個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
緩沖區的生命周期,或其他一些動態分配的數據。
可能不是malloc
segfaults和calloc
沒有。 為了證明這一點,放一個診斷puts( "allocated memory" );
在malloc-or-calloc之后再次嘗試。 循環后再扔一個。 這應該向你證明,導致問題的不是功能本身的選擇。
嘗試使用像valgrind這樣的運行時內存調試器。 如果它在您第一次使用它運行程序時發現問題,我不會感到驚訝。 如果事實證明你依賴像Alexandru C.建議的那樣的記憶,我也不會感到驚訝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.