我正在實現一個環緩衝區,並且在一個方法中,我正在從循環中的文件讀取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