我正在C程序中解碼數據。數據已壓縮,所以我試圖通過解壓縮正確的結果來解壓縮數據和成功。然後,我將這個解壓縮的數據傳遞給其他進程。該進程分配新數據,從傳入的數據中讀取數據,寫入新數據,然後釋放舊數據(因爲它不再使用)。但是,運行時,會在「free()」被調用的行中產生一個錯誤「decode.exe觸發了一個斷點」。 我的代碼是:免費數據時內存泄漏?
int decode (uint8_t* data, uint32_t size) {
compressed_stream stream;
stream.data = data;
stream.data_size = size;
uint32_t outsize;
//Compute output size and assign to outsize
//...
stream.out = (uint8_t*)malloc(outsize);
stream.size = outsize;
stream.inpos = stream.outpos = 0;
decompress(&stream);
//Not free stream.data yet
process(stream.out);
return 0; //Handling error later
}
「解壓縮()」函數被測試時,它不試圖改變指針分配輸出數據。我的數據沒有錯誤,而「如雷貫耳」來計算等於所需大小的輸出「的malloc()」返回非空數據
而且,過程如下:
int process(uint8_t* data)
{
//Process data here, assign it to global scope pointers for easy handling
//...
free(data);
return 0;
}
同樣,處理後的數據已經過測試並且沒有發生錯誤。但是當我到達「免費(數據)」行時,我崩潰了。
我試過不使用「process()」func,並在「decompress()」後釋放與stream.out相關的數據。但它仍然發生。 但是,當我試圖改變「免費(數據);」到:
realloc(data, 1);
free(data);
沒有錯誤發生。或者,當我改變「超大」的數值時,我的解壓縮數據輸出所需的數據大大多於沒有重分配數據的輸出,也沒有錯誤。
我不知道「malloc()」和「free()」函數發生了什麼。我的程序工作正常,它產生我需要的數據,但我想優化它使用的內存。感謝您的幫助或解釋!
「我正在用C編寫一個程序」 - 然後發送垃圾郵件的原因是什麼? – Olaf
Casting'malloc'很糟糕 - http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc –
使用調試器並獲取stream.out的值。檢查compress()後的值。檢查函數內的值。他們都應該是相同的。 –