1樓:網友
小括號是語法規定。這個規定大多是用於函式或過程定義的。括號內的東西是作為引數傳遞給函式使用的。
m_pserialport=new cserialport();這個空的表示不需要引數傳遞。
m_pserialport=new cserialport(12345);=這個傳遞的是乙個數值做為引數。
m_pserialport=new cserialport(「test」);這個傳遞的是乙個字串做為引數。
小括號是沒有什麼特定含義的。它只是用來規範語法以及告訴計算機這傻貨,來,幫哥們傳遞幾個引數。
int* p=new int(5); 這個是賦值5給指標變數相當於乙個函式將引數5初始化後,再傳遞給指標變數p.
int* p=new int[5]; 這個是有錯誤的,int[5]是沒什麼意義的。雖然編譯依然通過,但p^指向的值是隨機的,而不是5.
2樓:網友
這個小括號就是建構函式的括號,與int後面的小括號是相同的,內建型別int long什麼的也可以這麼寫,但int什麼的就不是建構函式了,只是簡單的初始化。
3樓:
道理相同,就是構造乙個對應的物件。
4樓:網友
應該不存在int* p=new int(5); 這種東西。c++新的標準?還是微軟自己的標準?
只有 int* p=new int[5];
下面你的問題。
因為可能有:
class cserialport
public:
cserialport();
cserialport(int num);
cserialport(char *psz);
你可以:m_pserialport=new cserialport();
m_pserialport=new cserialport(12345);
m_pserialport=new cserialport(「test」);
明白了嗎。
在mfc中為什麼我new了物件,但用delete卻總是報錯呢?
5樓:
江半仙 請不要誤導了,delete乙個空指標根本沒有關係,有關係的是delete完這個指標沒有設定為空,那樣就變成乙個野指標了。
我看你給出的程式並不完整,不過我覺得tinyxml應該提供了對應的記憶體管理,只要刪除根或者根本不用delete會自動幫你delete,這點你最好看下tinyxml的幫助。
至於會崩潰的問題建議你還是debug下應該是野指標的問題。
6樓:江半仙
那就可能是你的new運算子操作失敗了。
對於空指標當然不能delete
一般都是呼叫delete之前先對指標進行有效性檢驗:assert(p)/assert_valid(p)之類的。
然後在delete.防止同一物件被delete多次或者對空物件delete
希望對你有所幫助!
7樓:網友
是delete 到第幾個出錯的。
檢查指標是否為空。
為什麼mfc中很多new的物件找不到在哪delete
8樓:網友
你說的new出來的cmainframe其實被儲存到了m_pmainwnd成員中,在關閉程式的時候基類cwinapp會去delete這個棚圓咐成員的。
所以可以看出有些腔森new出來鏈純的物件為了方便使用會讓與它關聯的物件去delete它。
9樓:匿名使用者
有些物件是程式整個生命週期內有效的,這些可以沒有顯式delete
我使用vs2005 mfc程式,是否所有的new都要delete呢?
10樓:網友
所有使用new分配記憶體的物件,都需要進行delete處理,不然會引起記憶體洩漏。這是vs2005的新特性。
沒有通過new建立的物件都不必要用delete。其實在c裡面就已經有這樣的思想了,malloc也要用free釋放不是嗎?
csock usock;
int a;
這些沒有new的不必delete。在當前塊執行完畢後,編譯器它會自動幫你消除。
mfc delete 的使用疑問! 一般情況下,對於動態new出來的記憶體,需要呼叫delete進行析構和將記憶體返回給堆。
11樓:網友
1全部你在這句話 cmybyte(1,2))中由於new返回的是乙個指標對吧,因此mmm中加入的是乙個指標,而非物件,那此時delete p其實是去deleteadd中分配的那個指標所佔的區域,而那個區域並非new的 你不知道去delete的哪個區域,因為那個指標不是在堆疊裡分配的,你去delete堆疊中跟那個指標位址相同的位址的區域,可能那裡剛好被new了 你正好不出錯,但是下次delete的時候可能又剛被new過 這我不是很清楚 但是我相信你沒delete到那個物件。
12樓:網友
你的用法不是標準寫法。
delete p;
p= null;
delete p;//這裡不報異常,為什麼呢?
加上置空那句。
你再試試。
mfc 裡面的 delete 問題
13樓:網友
double **x;x=new double*[4];for(int i=0;i<=4;i++)x[i]=new double[4]。
先delete x[i];//單個元素釋放delete
然後delete x;//陣列釋放用delete
delete x;
使用delete前不用檢查指標是否為null。刪除空指標不會引發錯誤。
用new之類時,使用null對指標進行初始化。目的是,如果不小心在還未用new對該指標進行分配就使用的話,程式會出錯,這樣就可以輕鬆地知道錯誤在**。加了null,迫使指標指向位址為0x00000000,無論讀寫該位址都會出錯,而不做初始化,指標裡的值可能會是個垃圾值,對於這個垃圾值,程式不一定會報錯!
delete後,最好也給指標加null:delete x;x=null;(刪除後再使用也會報錯,同樣可以幫助確定出錯位置)
14樓:鹽水肉西瓜
delete 試試。
如果是刪除陣列,必須用 delete,否則不會釋放整個陣列所佔用的空間。
15樓:魔高丈
delete前先檢查一下變數是否==null,不等再delete
16樓:大鵬
new delete
malloc free
都要成對使用,不要造成記憶體洩露!建議重新檢查**。
mfc關於new的問題
17樓:匿名使用者
指標變數在建立的時候不會自動呼叫建構函式。
所以需要進行new操作。
18樓:匿名使用者
樓主,我也不太確定。 按照功能講 new 是在堆中申請的記憶體。整個程式中都有效的。 第二種是棧中申請的,函式中區域性有效。
19樓:網友
你不new,定義的指標是空指標,沒有指向的內容,不能用。
20樓:網友
恩,在堆上新建乙個cmydoc類的例項,不過使用之後要delete的啊,要不會記憶體洩露的。
21樓:手機使用者
cmainframe* pmainframe ; 這個只是給你一把鑰匙,並沒具體的鎖給你;
cmainframe* pmainframe = new cmainframe;而用new的時候就是給你一把鎖,然後返回一把鑰匙讓你能控制這把鎖。
mfc中關於new的問題
22樓:小八
定義乙個cmydoc類的物件。
關於mfc中delete物件的相關問題。
23樓:網友
cgraph *g=(cgraph *)m_;
這句有問題吧。
getupperbound()返回的是最後乙個元素的下標,怎麼能轉換成(cgraph*)呢。
應改為:cgraph *g=(cgraph *)m_;
24樓:網友
cgraph *g這樣子定義是將g(指標)指向m_;。
而你使用。removeat時,已經將該物件釋放。故再去delete時出錯。
25樓:網友
removeat已經將物件釋放了,再次delete就會出錯。
mfc中關於oldfontdcselectobjectfont的疑問
oldfont 是 dc 的上一個 hfont,這裡只是做一下備份 gdi 太老啦 win7 或以上使用者改用 direct2d 吧 mfc中是什麼意思 oldfont是dc 的上一個 hfont,這裡只是做一下備份 gdi太老啦 win7 或以上使用者改用 direct2d 吧。mfc中呼叫set...
cwinform中new出來的label怎麼編寫點選事件。不要c,是c
要給動態生成的label新增 btnclick事件處理過程 lbl 在c 中,我把 label標籤new到窗體上,怎樣為new出來的每一個標籤新增事件,就是點選它,會彈出標籤上的.用事件 看一點我的 在form1裡面寫一個方法,用來修改label 在form2裡面寫 public delegate ...
關於MFC中裝置環境物件CDC的一些淺顯的問題
1只要存在無效域就會重畫,就有wm paint endpaint 作用就是消除無效域,wm paint 訊息優先順序別很低,系統會將幾個wm paint 無效域疊加,2windows系統最常見的程式,由兩個視窗組成,一個是主視窗,一個是檢視視窗,就是記事本中間白色的部分,檢視視窗在前,蓋住了主視窗,...