在使用動態記憶體分配的程式中,常常會出現許多錯誤。這些錯誤包括對null指標進行解引用操作、對分配記憶體進行操作時越過邊界、釋放並非記憶體分配的記憶體、試圖釋放一塊動態分配的記憶體的一部分及一塊動態記憶體被釋放之後被繼續使用。
動態記憶體分配錯誤主要有兩大**。
最常見的錯誤就是忘記檢查所請求的記憶體是否成功分配。這種型別的bug難以發現,下面程式展現了一種技巧,可以很可靠進行這個錯誤檢查。
/* 定義乙個不易發生錯誤的記憶體分配器 */
#include #define malloc
#define malloc( num, type ) ( type *)alloc( ( num ) * sizeof( type ) )
extern void *alloc( size_t size );
/* 不易發生錯誤的記憶體分配器的實現 */
#include #include "alloc.h"
#undef malloc
void *
alloc( size_t size )
return new_mem;
}/* 乙個使用很少引起錯誤的記憶體分配器的程式 */
#include "alloc.h"
void function()
第二大錯誤**是操作記憶體時超過了分配記憶體的邊界
。這種問題不是那麼明顯,在malloc和free的有些實現中,它們以鍊錶的形式維護可用的記憶體池,對分配的記憶體之外的區域進行訪問可能破壞這個鍊錶,這有可能產生異常,從而終止程式。
常見動態記憶體錯誤
一 對null指標的解引用操作 void test 二 對動態開闢空間的越界訪問 void test2 for i 0 i 10 i free p 三 對非動態記憶體使用free釋放 void test3 四 使用free釋放一塊動態開闢記憶體的一部分 void test4 五 對一塊動態記憶體多次...
常見動態記憶體錯誤 記憶體洩漏
常見動態記憶體錯誤 編譯器不能自動發現動態記憶體錯誤,動態記憶體錯誤通常只能在程式執行時才能 捉到,而且錯誤原因不容易查詢,錯誤本身也不容易捕捉,改錯難度較大。1.動態記憶體分配失敗卻繼續操作 記憶體不足等有可能導致動態記憶體分配失敗,所以使用new請求分配動態記憶體後一定要檢查返回位址是否為nul...
常見的動態記憶體錯誤
來自 c 和指標.p223 在使用動態記憶體分配的程式中,常常會出現許多錯誤。這些錯誤包括對null指標進行解除引用操作 對分配的記憶體進行操作時越過邊界 釋放並非動態分配的記憶體 試圖釋放一塊動態分配的記憶體的一部分以及一塊動態記憶體被釋放之後還繼續使用它。以下是一些需要注意的事項 1 在請求動態...