#include
#include
using
namespacestd;
//p-記憶體指標
//n-申請記憶體數量
//t-申請記憶體型別
#definerenew(p,n,t)/
voidmain(void)
renew(pold,10,int);
for(i=5;i<10;i++)
for(i=0;i<10;i++)
deletepold;*/
}幾個問題:
1. 有了malloc/free為什麼還要new/delete?
malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子,它們都可用於申請動態記憶體和釋放記憶體。對於非內部資料型別的物件而言,光用maloc/free 無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式, 物件在消亡之前要自動執行析構函式。由於malloc/free 是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以及乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete 不是庫函式。
2. 上面**中如果在22行中申請了16長度的記憶體,則使用delete
pold;時將出現非法錯誤,這是由於記憶體越界造成的,字串最後面需要'/0'來表示字串的結尾,所以在第22行應申請17長度的記憶體。在debug模式下,越界的時候delete會非法操作,但是release模式下不會。因為debug模式下分配記憶體的時候會多分配4個位元組,這4個位元組內容是0xfe,delete的時候會檢查這4個位元組,看是否越界。
realloc函 realloc函式使用規則
realloc函式使用規則如下 1 realloc失敗的時候,返回null 2 realloc失敗的時候,原來的記憶體不改變,不會釋放也不會移動 3 假如原來的記憶體後面還有足夠多剩餘記憶體的話,realloc的記憶體 原來的記憶體 剩餘記憶體,realloc還是返回原來記憶體的位址 假如原來的記憶...
realloc使用詳解
分析realloc invalid pointer 指標無效等錯誤!realloc函式用來為ptr重新分配大小為size的一塊記憶體,看似很簡單,在使用過程中卻會發生各種錯誤。函式形式為 void realloc void ptr,size t new size 最近在網上檢視了一些資料,在glib...
realloc使用詳解
分析realloc invalid pointer 指標無效等錯誤!realloc函式用來為ptr重新分配大小為size的一塊記憶體,看似很簡單,在使用過程中卻會發生各種錯誤。函式形式為 void realloc void ptr,size t new size 最近在網上檢視了一些資料,在glib...