这是我的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/