考慮的C代碼:從C以外的函數中解放出來指針
void mycode() {
MyType* p = malloc(sizeof(MyType));
/* set the values for p and do some stuff with it */
cleanup(p);
}
void cleanup(MyType* pointer) {
free(pointer);
pointer = NULL;
}
我錯在以爲cleanup(p);
之後被調用時,p的內容現在應爲空?請問cleanup(MyType* pointer)
是否正確釋放內存分配?
我正在編寫我的大學作業,並發現調試器仍然顯示指針有一個內存地址,而不是像我期望的0x0(或NULL)。
我發現C中的內存管理非常複雜(我希望這不僅僅是我)。任何人都可以看到發生的事情?
+1用於暗示某些程序集會幫助 – 6502 2011-05-19 06:08:48
Heh,「6502」。 (我明白了) – DigitalRoss 2011-05-19 07:10:35
呵呵呵......不,我是認真的。其實我開始了一個長時間的答覆,但後來我決定放棄它,因爲這更多的是關於教學編程已經從自下而上(IMO的最佳方式)轉到自上而下(這不好,基本上是因爲那裏沒有頂級)來充值(即從Java等醜陋的東西開始並且無處可去)。我真的相信指針是非常簡單的,但只有當你牢牢掌握計算機的工作原理時(一個簡單的程序集是IMO的一個很好的起點)。沒有這種基礎編程就會變成一大堆具有奇特屬性的神奇單詞。 – 6502 2011-05-19 09:04:23