我有像這樣的結構體,解放出來潛在未初始化的結構成員
typedef struct Player {
char *name;
char *heroID;
char *heroName;
int slotNo;
} Player;
然後我將其定義爲靜態分配的陣列
Player players[10];
我的程序可能需要退出時,我還沒有完全在players
中分配了Player
結構中的每個char*
字段的所有字段,並且我已經決定在退出之前釋放任何已分配的內存,即使現代操作系統不要求您這樣做,因爲這樣做是很好的編程實踐。
但是,我不能只是循環通過players
和free(player[i].name)
等,因爲它可能是未初始化的。
解決此問題的唯一方法是,在定義數組並然後釋放內存後,手動將每個char指針初始化爲NULL,然後檢查指針是否爲NULL,以決定是否應釋放它?
如果是這樣,當我通過使用大括號聲明播放器數組時,什麼是初始化,循環和手動賦值或定義值的最佳方式。還是有另一種方式?
'我決定在退出之前釋放任何已分配的內存,即使現代操作系統不需要你,因爲這樣做是一種很好的編程習慣。「並非如此。我認爲這是浪費時間和可讀性。如果您正在編寫庫,則必須始終清理,因爲用戶可能決定處理該錯誤並繼續。但是對於一個應用程序來說,只要退出內存錯誤就是一種理智的行爲。 – orlp
我與他的回覆:)爆米花:) http://blogs.msdn.com/b/oldnewthing/archive/2012/01/05/10253268.aspx - 說,你真的應該calloc()作爲Jakub下面提到所以你永遠不會有無效的垃圾指針 – iccir
@nightcracker我基於我對這些線程的決定,http://stackoverflow.com/questions/3126122/in-c-is-it-necessary-to-free-a-pointer-at - 出口,http://stackoverflow.com/questions/5405843/is-it-up-to-the-programmer-to-deallocate-on-exit,http://stackoverflow.com/questions/2213627/when-you -exit -ac-application-is-the-malloc-ed-memory-automatically-freed – Michael