gpt4 book ai didi

删除时出现 C++ 内存错误 - 调试断言失败

转载 作者:行者123 更新时间:2023-11-30 03:03:32 24 4
gpt4 key购买 nike

我正在尝试将一组新的 ModelImages 添加到 vector 中,但出现错误,调试断言失败,表达式:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)。尝试删除生成的第二个 ModelImage 时会发生这种情况。

std::vector<ModelImage> ModelImages;

for(int n=0;n<nParamSets;n++)
{
ModelImage* mI = new ModelImage(MOD_WIDTH,MOD_HEIGHT);
ModelImages.push_back(*mI);
delete mI;
}

构造函数和析构函数以及 copy-and-swap 函数如下:

ModelImage(int _width, int _height)
{
width = _width;
height = _height;
nPixels = width*height;
distance = new float[nPixels];
intensity = new float[nPixels];
derivX = new float[nPixels];
derivY = new float[nPixels];
maxDistance = 0.0f;
minDistance = 0.0f;
}

~ModelImage()
{
delete [] derivX;
delete [] derivY;
delete [] distance;
delete [] intensity;
}

ModelImage& operator=(ModelImage other)
{
swap(*this, other);
return *this;
}

friend void swap(ModelImage& first, ModelImage& second)
{
using std::swap;
swap(first.derivX,second.derivX);
swap(first.derivY,second.derivY);
swap(first.distance,second.distance);
swap(first.intensity,second.intensity);

swap(first.nPixels,second.nPixels);
swap(first.width,second.width);
swap(first.height,second.height);
}

就在尝试删除第二个 ModelImage 之前,查看 vector ModelImages 表明 vector 中的两个 ModelImages 具有相同的距离、强度、derivX、derivY 数组分配内存地址。

感谢任何帮助,谢谢。

最佳答案

这可能是因为您没有复制构造函数。

创建一个复制构造函数,复制您的指针所引用的内存。

当使用 std 容器时,它们通常会在您插入时创建对象的拷贝。由于您没有复制构造函数,因此所有成员指针最终都指向相同的内存地址,因为它只是在按成员方式复制数据。一旦其中一个临时拷贝被破坏,(或者当您在插入后对原始对象调用 delete 时)插入对象的内存已从其下方删除。

关于删除时出现 C++ 内存错误 - 调试断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9283951/

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