首页 > 解决方案 > 我正在创建一个结构向量,该结构包含一个动态分配的数组。析构函数抛出“*.exe 已触发断点。发生”

问题描述

我正在尝试创建一个张量向量,并且我正在代表一维的张量。我创建了一个结构,其中包含一个动态分配的数组、一行和一列数据(稍后用于越界检查)。

struct TensorPtrManaged1D 
{
    double* m_tensorPtr;
    unsigned m_row;
    unsigned m_column;

    TensorPtrManaged1D(unsigned rowNum, unsigned colNum) {
        m_row = rowNum;
        m_column = colNum;
        m_tensorPtr = new double[rowNum * colNum];
        for (unsigned i = 0; i < rowNum; ++i){
            for (size_t j = 0; j < colNum; j++){
                m_tensorPtr[i * colNum + j] = 1;
            }
        }
    }
    ~TensorPtrManaged1D() { delete[] m_tensorPtr; }
};

如果我创建一个对象它工作正常,但如果我把同一个对象放在一个向量中,那么每当调用析构函数时,它都会抛出一个异常:“* .exe 已触发断点。发生”

TensorPtrManaged1D t7(3, 2);             //This executes and cleans up the memory without leak
vector < TensorPtrManaged1D > t7v(1,t7);    //This produces the exception, once it goes out of scope

旁注:在实现它时,我发现一旦将其放入向量中,我就失去了直接数组访问的所有速度优势,因此我可以使用向量向量实现相似的速度。但是,我不明白为什么当析构函数以其他方式工作时,结构不会毫无问题地被删除。

标签: c++vectorstructdestructor

解决方案


推荐阅读