-1
我正在寫一個緩衝成一個二進制文件。代碼是在以下情況:Ç - 寫緩衝到一個文件中,然後釋放緩衝區事業段錯誤
FILE *outwav = fopen(outwav_path, "wb");
if(!outwav)
{
fprintf(stderr, "Can't open file %s for writing.\n", outwav_path);
exit(1);
}
[...]
//Create sample buffer
short *samples = malloc((loopcount*(blockamount-looppos)+looppos) << 5);
if(!samples)
{
fprintf(stderr, "Error : Can't allocate memory.\n");
exit(1);
}
[...]
fwrite(samples, 2, 16*k, outwav); //write samplebuffer to file
fflush(outwav);
fclose(outwav);
free(samples);
最後的free()的調用導致我隨機段錯誤。 經過幾次頭痛後,我認爲這可能是因爲fwrite調用只會在延遲後執行,然後它會讀取釋放的內存。所以我添加了fflush調用,但問題仍然存在。
只有這樣,才能擺脫它是不釋放內存,讓OS爲我做的。這應該是不好的做法,所以我寧願問是否沒有更好的解決方案。
有人問之前,是的,我檢查文件被正確打開,是的,我測試的內存是正確分配,不,我不碰返回指針以任何方式。你可以自由地做任何你想要的緩衝
你是對的,我正好有1個字節的緩衝區溢出,這一點關係都沒有用free()調用。多麼討厭。感謝您指點我正確的方向。 – Bregalad