簡體   English   中英

Calloc導致segfault而不是malloc

[英]Calloc causes segfault but not malloc

我正在實現一個ringbuffer,在一個方法中,我從循環中的文件中讀取CHUNKSIZE字節,並將指針插入到ringbuffer中。

我在一個while循環中這樣做。 代碼適用於malloccalloc在循環結束時導致段錯誤。 這真的很神秘。

這是代碼:

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);
}

malloccalloc之間的唯一區別是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM