int main()
malloc開闢的空間足夠大,並且沒有對指標p進行合理的判斷,那麼p有可能是空指標,空指標解引用這種錯誤就在這種情況下很容易出現。
int main()
free(p);
return
0;}
雖然用malloc動態開闢空間,那也不能太過分呀,只開闢了40個位元組,下面卻訪問了80個位元組,多的40個位元組不屬於我們,那麼這個時候就越界訪問了。
int main()
p = &a; //
free(p);
return
0;}
這裡存在兩個問題:問題一: p在這裡並不是存的動態記憶體開闢的位址,那下面free的p也不是動態記憶體開闢的空間,而是a,我們發現a並不是動態記憶體開闢的,所以這裡就出現了
對非動態開闢記憶體使用free釋放。
問題二: 我們正兒八經動態開闢的空間卻沒有得到釋放,所以就記憶體洩漏了。(動態記憶體開闢出來之後,不用,也不還,找不到,釋放不了就是記憶體洩漏。)
int main()
free(p);
return
0;}
這時候free的p,不再指向動態記憶體的起始位置,p指向的是第6塊空間,如果從這裡開始釋放就釋放的其中的一部分,這時候就會出現錯誤。
int main()
//開闢成功,並使用
free(p);
//...
free(p);
reutrn 0;
}
這裡出現的錯誤是重複釋放,。想要避免這類問題出現,可以在free(p)之後,將p = null;
void test()
}int main()
忘記釋放不再使用的動態開闢的空間會造成記憶體洩漏。動態開闢的空間一定要釋放,並且正確釋放。解決辦法:malloc 和 free 一定要成對使用。
常見動態記憶體錯誤
一 對null指標的解引用操作 void test 二 對動態開闢空間的越界訪問 void test2 for i 0 i 10 i free p 三 對非動態記憶體使用free釋放 void test3 四 使用free釋放一塊動態開闢記憶體的一部分 void test4 五 對一塊動態記憶體多次...
常見的動態記憶體錯誤
來自 c 和指標.p223 在使用動態記憶體分配的程式中,常常會出現許多錯誤。這些錯誤包括對null指標進行解除引用操作 對分配的記憶體進行操作時越過邊界 釋放並非動態分配的記憶體 試圖釋放一塊動態分配的記憶體的一部分以及一塊動態記憶體被釋放之後還繼續使用它。以下是一些需要注意的事項 1 在請求動態...
常見動態記憶體錯誤 記憶體洩漏
常見動態記憶體錯誤 編譯器不能自動發現動態記憶體錯誤,動態記憶體錯誤通常只能在程式執行時才能 捉到,而且錯誤原因不容易查詢,錯誤本身也不容易捕捉,改錯難度較大。1.動態記憶體分配失敗卻繼續操作 記憶體不足等有可能導致動態記憶體分配失敗,所以使用new請求分配動態記憶體後一定要檢查返回位址是否為nul...