我按順序運行一堆malloc
,並檢查每次以確保它成功。事情是這樣的:C清理錯誤/終止
typedef struct {
int *aray;
char *string;
} mystruct;
mystruct *mystruct_init(int length)
{
mystruct *foo = malloc(sizeof(int *));
if (!foo) exit(1);
foo->array = malloc(length * sizeof(int));
if (!foo->array) exit(1);
foo->string = malloc(length * sizeof(char));
if (!foo->string) exit(1);
return foo;
}
因此,當一個malloc
失敗,程序退出而不釋放了以前的。什麼是一些技巧,以確保如果失敗的情況下,程序安全地退出所有分配的內存釋放?
你*真的確定*要支持平臺(讀:裸機,或者至少沒有MMU /虛擬內存和普通堆)在程序退出時,系統不會自動釋放這些內存? – Deduplicator 2014-11-20 22:52:05
刪除是正確的,任何真正的操作系統將釋放分配給您的程序在退出時的所有內存,無論如何。但是,我讚賞你的努力,以便不依賴於這個問題 - 程序經常成爲其他程序的模塊,然後它很重要。 – 2014-11-20 22:55:08
@LeeDanielCrocker:任何自行調用退出/中止的模塊(除非有明確的文件證明這樣做是出於真正的理由,或者當它檢測到不可能的條件時)已經超出了希望。 – Deduplicator 2014-11-20 23:01:07