使用new實現realloc操作

2021-08-22 20:30:47 字數 862 閱讀 2019

#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...