2014-02-15 136 views
0

我寫了一個非常小的程序,使用類,繼承和多態。在主要部分中,我已經使用new聲明瞭一個指針,當我調用delete並調試程序時,它會崩潰。C++調試斷言失敗指針

反正這裏是我的代碼

#include <iostream> 
using namespace std; 

class Shape{ 
protected: 
    int height; 
    int width; 
public: 
    void getVal(int num1, int num2){ 
     height = num1; 
     width = num2; 
    } 
    int printVal(){ 
     return (width * height); 
    } 
}; 

class Rectangle: public Shape{}; 

int main(){ 
    Rectangle rec; 
    Shape* shape = new Rectangle; 
    shape = &rec; 
    shape ->getVal(2,2); 
    cout << "Your answer is: " << shape ->printVal() << endl; 
    delete shape; 
    system("pause"); 
    return 0; 
} 

謝謝

回答

1
Shape* shape = new Rectangle; 
shape = &rec; 

您在堆中分配一個對象,然後迅速泄漏它。 shape現在指向rec,一個自動對象。

delete shape; 

shape當前指向未分配與new,因此調用delete它具有未定義行爲的對象。

+0

你能告訴我從我的代碼,這將是很好@Igor Tandetnik – user3264250

+0

我應該怎麼做才能夠調用刪除就可以了@Igor Tandetnik – user3264250

+0

你應該一)跌落'矩形REC;'和'形狀= &rec; '線條,和b)給'形狀'虛擬析構函數。 –