Cchar型別new的記憶體釋放出問題了

2021-03-09 19:02:00 字數 3445 閱讀 7599

1樓:

point = new char[5];時 point指向bai了du一新分配的記憶體

point = "fda";時,zhipoint拋棄了dao剛new的記憶體,指向了"fda"所在地址。fda"本身已經被分

回配好答記憶體。所以剛才的new記憶體已經失去意義,因為point已經不再指向它了。這也是造成記憶體洩露的一個原因,因為剛動態分配的那塊記憶體已經沒辦法釋放了(被point指標拋棄了,沒辦法再找到這塊記憶體地址,也就沒法delete)。

"fda"的記憶體不是動態分配的,所以delete時出錯。

這要一個一個字元來操作:point[0] = 'f'; point[1] = 'd'; point[2] = 'a'; 或者參考 jxq61 兄的回答。(注意,這裡才是真正的把字元存到新分配的記憶體裡)

2樓:匿名使用者

point 是指標。指向了bai一du

個字串。這個字串是zhi佔六個位元組的。daopoint = new int[10]; 這個是申請了版

一個動態記憶體,int型的權佔4個位元組。 int[10].只是一個整形變數,並不是申請了10個int型的記憶體。而是,只申請了一個。六個位元組的東西往四個位元組裡存,能不出錯嗎?

我是學c語言的,c++只是看了看。我按照c語言的東西來解釋的。希望對你有用。

3樓:匿名使用者

point = new int[10] 表示你分配了 10個int型的空間,你給它賦字串肯定錯了。

就如 int s[5] = "hello"

4樓:萬哩挑壹

delete q;//釋放

原來來的

delete p;//釋放現在的源 '

記住:記憶體釋放了之後不能再使用bai該塊記憶體,最好在釋du放之後將指標zhi變數賦dao值為空 。

delete q;

q= null;

c++是在c語言的基礎上開發的一種物件導向程式語言,應用廣泛。c++支援多種程式設計正規化 --物件導向程式設計、泛型程式設計和過程化程式設計。最新正式標準c++14於2023年8月18日公佈。

其程式設計領域眾廣,常用於系統開發,引擎開發等應用領域,是至今為止最受廣大程式設計師受用的最強大程式語言之一,支援類:類、封裝、過載等特性!

5樓:匿名使用者

point = new char[5];

point = "fda";//這句來話登出了就源對了 不知道為什麼

point = "fda"

應改為:

memmove( point, "fda", 3);

或:strcpy( point, "fda");

在最前面加上:

#include "string.h"

6樓:匿名使用者

程式在解構函式中釋放字元陣列的時候失敗了,程式試圖去釋放尚未分配的記憶體空間

關於c++動態記憶體分配 這樣寫會不會出什麼問題? char *a = new char []; a

7樓:匿名使用者

請在new char的時候就寫好申請內

存的大小new char[size], 編譯器並不會從後文或者執行時推斷需要多少記憶體

我沒查到不在裡寫上申請記憶體大小時編譯器會怎麼處理, 看上去應該會報錯才對, 能通過編譯的話我猜可能是當作0或者1或者某個預設值, 總之申請到的記憶體不一定能存得下從cin接收的字串

即使不填上要申請的記憶體大小也能正常執行可能只是char *a指向的那一塊記憶體剛好沒有被用到而已, 從cin輸入的字串足夠長的話多半就會報錯了

c++使用char* a=new char[]的問題。。急

8樓:匿名使用者

字串尾部應該有個'\0'作為字串結尾標誌,所以申請空間應該多申請一個:

char*temp_name=new char[y+1];

在for(){}迴圈後面,加上temp_name[i]='\0';就行了.

在c++中,釋放new分配的記憶體空間時,使用delete和delete[]是不是有區別?詳細說明下

9樓:匿名使用者

c++告訴我們在**用 new 分配的單個物件的記憶體空間的時候用 delete,**用 new 分配的一組物件的記憶體空間的時候用 delete。

樓主的這個問題提得很好。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。

關於 new 和 delete,其中又分為兩種情況:(1) 為基本資料型別分配和**空間;(2) 為自定義型別分配和**空間。

對於 (1),上面提供的程式已經證明了 delete 和 delete 是等同的。但是對於 (2),情況就發生了變化。請看下面的程式。

#include ;

using namespace std;

class t

~t()

};int main()

大家可以自己執行這個程式,看一看 delete p1 和 delete p1 的不同結果,我就不在這裡貼執行結果了。

從執行結果中我們可以看出,delete p1 在**空間的過程中,只有 p1[0] 這個物件呼叫了解構函式,其它物件如 p1[1]、p1[2] 等都沒有呼叫自身的解構函式,這就是問題的癥結所在。如果用 delete,則在**空間之前所有物件都會首先呼叫自己的解構函式。

基本型別的物件沒有解構函式,所以**基本型別組成的陣列空間用 delete 和 delete 都是應該可以的;但是對於類物件陣列,只能用 delete。對於 new 的單個物件,只能用 delete 不能用 delete **空間。

所以一個簡單的使用原則就是:new 和 delete、new 和 delete 對應使用

10樓:匿名使用者

如果new得是一個變數,那麼使用delete就可以。

但是如果new得是一個陣列,使用delete的話只能釋放陣列的第一個元素佔用的記憶體,這會造成嚴重的記憶體洩漏的。

使用new申請的陣列應該使用delete來銷燬它。

11樓:匿名使用者

delete一般只釋放用new所分配的,並且只分一個型別的大小的記憶體,每個delete和new對應;而delete釋放用new所分配的,並且為同一種型別的多個元素一次所分配的記憶體。也就是用new一次為一個元素分配記憶體時,用delete;而用new一次為一個集合(陣列)分配記憶體時,用delete。如char *p=new char時用delete p;youclass *pclass=new youclass時用delete pclass;又如用char *p=char[10]時用delete p;youclass *pclass=new youclass[10]時用 delete *pclass;

12樓:匿名使用者

delete 是銷燬一個變數!delete 是銷燬一個變數陣列

C 中new分配記憶體的問題,C 動態分配記憶體 記憶體洩漏問題 new

這樣是會有記憶體洩漏的,因為第一次執行s new stu 後,系統申請了一塊新的記憶體空間 型別為stu 並把其地址賦給s 第2此執行s new stu後,系統又申請了一塊新的記憶體空間,並把其地址賦給s,此時把s原來的值覆蓋掉了,也就是第一次申請的記憶體空間的地址丟失了 而delete s 只是把...

oppo的手機要怎麼釋放記憶體,OPPO手機怎麼清理手機記憶體呢?

oppo手機記憶體不足?教你這個隱藏功能,馬上擴大手機記憶體!oppo手機怎麼清理手機記憶體呢?手機提示記憶體已滿 記憶體不足或需要優化記憶體,建議您 1.開啟智慧管理器 儲存空間 版 儲存,清理緩 oppo新coloros系統主介面拉選單鍵鍵清理按home鍵清理臺哦檔案管理面檔案清理 清理快取解除...

怎麼把電腦的記憶體完全釋放出來,怎樣釋放電腦記憶體

因為你用的是cpu中的整合顯示卡,必須要把你記憶體虛擬一部分做為視訊記憶體,如果你要完全釋放那就請您在買塊獨立顯示卡安裝上去,問題就可以解決,謝謝!在電腦的狀態列空白處單擊右鍵,選擇工作管理員,開啟後,可將沒用的程序結束,釋放記憶體 電腦的記憶體不可能完全釋放,因為作業系統本身就要佔用一部分記憶體。...