这是我的addCard函数,它以playingCard作为参数,然后将其自身的地址移交给分配给playingCard对象的指针数组。

void cardHand::addCard(playingCard card) {
    theHand[nElems++] = &card;
} // addCard()

现在,当我运行程序时,它可以正常运行,但是在调用析构函数时会崩溃。
cardHand::~cardHand() {
    for(int c = 0;c<MAX;c++) {
        if(theHand[c] != NULL)
            delete theHand[c]; // here is the problem
    }
    delete [] theHand;
} // class destructor

是因为我只是在addCard函数中交出playingCard对象的地址而导致崩溃吗?应该是一个指针吗?

最佳答案

问题在这里
void cardHand::addCard(playingCard card) { theHand[nElems++] = &card; }
您存储临时卡对象的地址,该地址将在addCard方法末尾销毁。

然后在析构函数中尝试再次将其删除。

您有两个选择。

首先:使addCard仅接受卡配置,并使用new方法中的addCard创建您的卡。
第二个:通过指针接受卡,但是您的cardHand的析构函数不能负责删除卡。删除将执行创建所有卡的Deck对象。

关于c++ - 析构函数问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1081868/

10-14 04:51