代碼并沒有報錯,但是運行時出現了重復delete指標p的問題,
buyer *p;
p=new buyer; //為p動態分配記憶體空間
if (s2 == "普通用戶")
{
buyer buy1(s1, id, num1, num2); //構造普通用戶物件
p = &buy1; //基類指標指向該物件
}
else if (s2 == "會員")
{
member m1(s1, id, num1, num2, scale); //會員物件
p = &m1;
}
else if (s2 == "貴賓")
{
vip v1(s1, id, num1, num2, d); //貴賓物件
p = &v1;
}
else
{
cout << "等級輸入有誤" << endl;
exit(1);
}
double p1;
p1 = p->getpay(b1, b2); //列印訂單
cout << endl;
cout << "**********************************************" << endl;
cout << "訂單資訊:" << endl;
p->disp();
cout << "**********************************************" << endl;
cout << endl;
delete p;
uj5u.com熱心網友回復:
這個成對出現沒問題,寫好解構式就可以了p=new buyer
delete p;
但是你中間讓p=&buy1了,改變了他的指向,面且指向的是一個臨時變數,離開作用域手buy1自動析構了,也就是指向的空間第一,己經不是你最初分配的buyer了,第二你重新指向的空間己經被釋放了,后面再delete p;會重復釋放。
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
new 和delete成對使用,你既然new了就不應該指向一個離開if就會釋放的地址.uj5u.com熱心網友回復:
如果不new的話編譯器讓我必須初始化 運行也不通過
uj5u.com熱心網友回復:
明白了 感謝幫助
uj5u.com熱心網友回復:
明白了 感謝幫助 繪圖風格單調易懂
uj5u.com熱心網友回復:
這個和new無關,是你自己代碼沒有初始化
uj5u.com熱心網友回復:
可能不大需要為p new一個空間(new和delete都不要)。buyer* p = null;似乎就可以了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/108740.html
標籤:C++ 語言
上一篇:幫忙看看怎么優化代碼
