gpt4 book ai didi

c++ - 双自由错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:11:04 25 4
gpt4 key购买 nike

我为一个名为 copy() 的对象创建了一个函数,它应该只返回一个具有所有相同值的对象实例 -

Grid Grid::copy() {

Grid result;

result.setFilename(f_name);
result.setNumOfRows(num_rows);
result.setNumOfCols(num_cols);
result.setMap(map);


return result;
}

我的析构函数看起来像这样 -

Grid::~Grid() {
for(int r=0;r<num_rows;r++)
delete [] map[r];
}

现在每当我的代码运行并且调用复制函数时,我都会收到错误

*** glibc detected *** ./go: double free or corruption (!prev): 0x0982c6a8 ***

之后还有很多其他信息(大文本)。那只是意味着内存被删除了两次正确吗?如果是这样,这怎么可能?为什么析构函数会被调用两次?

调用它的代码如下所示 -

for(;;) {
Grid g;

if(which_display == 1) {

.....
.....
g = myServer->getAgent()->getGrid()->copy(); //HERE


}
//print
std::cout<<g.toString();
}

我觉得我遗漏了一些明显的东西。有人可以向我指出析构函数是如何被调用两次的吗?

最佳答案

您的复制功能并未创建 map 的深层拷贝;它只是复制指针映射包含。当对原始对象和拷贝调用析构函数时,这些指针将被删除两次。

关于c++ - 双自由错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7235978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com