#include <iostream>
class Stringbad
{
private:
int na;
int nb;
public:
Stringbad(int a,int b);
void show();
};
//////////////////////////////////////
void Stringbad::show()
{
cout<<"na="<<na<<endl;
cout<<"nb="<<nb<<endl;
}
//////////////////////////////////////
Stringbad::Stringbad(int a,int b)
{
na=a;
nb=b;
}
/////////////////////////////////////
int main(int argc, char *argv[])
{
using namespace std;
Stringbad* p=new Stringbad(5,8); //請問怎樣delete掉
p->show(); // 用new分配來的整個物件 p?
cout<<endl;
delete p; //這句只能delete 成員na,為什么?
cout<<"delete p"<<endl;
p->show();
cin.get();
cin.get();
return 0;
}
c-free的運行結果
na=5
nb=8
delete p
na=0
nb=8 //想當然地nb=0才對呀,為什么呢?
uj5u.com熱心網友回復:
已經找到原因了,是編譯器問題。VC6的運行結果是:
na=5
nb=8
delete p
na=-572662307
nb=-572662307
完全符合預期
不斷地試錯,是學C++一個好方法。
uj5u.com熱心網友回復:
#include <iostream>class Stringbad
{
private:
int na;
int nb;
public:
Stringbad(int a,int b);
void show();
};
//////////////////////////////////////
void Stringbad::show()
{
cout<<"na="<<na<<endl;
cout<<"nb="<<nb<<endl;
}
//////////////////////////////////////
Stringbad::Stringbad(int a,int b)
{
na=a;
nb=b;
}
/////////////////////////////////////
int main(int argc, char *argv[])
{
using namespace std;
Stringbad* p=new Stringbad(5,8); //請問怎樣delete掉
p->show(); // 用new分配來的整個物件 p?
cout<<endl;
delete p; //這句只能delete 成員na,為什么?
cout<<"delete p"<<endl;
p->show(); //p已經洗掉,此處是非法呼叫
cin.get();
cin.get();
return 0;
}
uj5u.com熱心網友回復:
"這句只能delete 成員na,為什么?"delete 不是 清除 na nb !
uj5u.com熱心網友回復:
就是這么delete 不要過分相信編譯器uj5u.com熱心網友回復:
delete之后,只是把地址釋放了,短時間內沒有其他程式使用該地址時候,這個指標指向的地址還是之前的位置,一般使用delete之后都需要把指標指向空
uj5u.com熱心網友回復:
預防野指標,好習慣。

uj5u.com熱心網友回復:
using namespace std;Stringbad* p=new Stringbad(5,8); //請問怎樣delete掉
p->show(); // 用new分配的是Stringbad物件的記憶體,p是指向那塊記憶體的指標
cout<<endl;
delete p; //已經把記憶體釋放. 但指標不會自動置空, 此時p是一個野指標(概念就不說了)下面應該要加上p = NULL;
cout<<"delete p"<<endl;
p->show();
cin.get();
cin.get();
return 0;
}
c-free的運行結果
na=5
nb=8
delete p
na=0
nb=8 //無倫na nb的值是多少都是錯誤的, 野指標帶來的錯誤不可預期...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/78356.html
標籤:基礎類
上一篇:怎么檢測快捷鍵被哪些程式占用了?
