2015-10-13 32 views
-2

我有這樣的緩衝:免費 - SP16緩衝

SP16 audio_data[4000]; //Typershort SP16 

,這將是充滿音頻樣本:

memcpy(audio_data, global_data, size_chunck); 

但如果我這樣做free(audio_data[4000])我會觸發一個斷點,所以我會得到一個錯誤。爲什麼?

+0

閱讀** **小心:http://port70.net/~nsz/c/c11/n1570.html#7.22.3.3p2 – Olaf

回答

2

因爲您可能只有free()內存通過malloc()calloc()realloc()獲得。

+0

我如何收拾這樣的變量? @glglgl – jdscardoso

+1

@jdscardoso通過不創建它。一旦你擁有了它,你就擁有了它。這就是爲什麼這種分配被稱爲「靜態分配」,而不是通過堆的「動態分配」(malloc,free,...) – glglgl

1

如果您free內存未分配malloc或類似的程序可能會導致錯誤。

您的變量未分配使用malloc或類似的,所以沒有必要free它。

從C99標準 -

7.22.3.3自由功能

  • [...]。否則,如果參數不匹配的指針返回較早通過內存管理函數,或者如果通過調用free或realloc釋放空間,則行爲是未定義的。