c++ - 我正在创建一个结构向量,该结构包含一个动态分配的数组。析构函数抛出“*.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
旁注:在实现它时,我发现一旦将其放入向量中,我就失去了直接数组访问的所有速度优势,因此我可以使用向量向量实现相似的速度。但是,我不明白为什么当析构函数以其他方式工作时,结构不会毫无问题地被删除。
解决方案
推荐阅读
- python - 有没有办法在 python 中模拟对象的 isinstance() ?
- javascript - 如何在 Babylonjs 中将网格对象大小作为像素(不是 Vector3)?
- ios - 如何防止图像被放入可归属的 UITextView
- javascript - 我如何在更短的时间内完成这个问题?
- autodesk-forge - 如何在 Autodesk forge 2d 查看器中确定对象的起点和终点
- python - 无法从 Kafka 接收数据到 Spark 流
- javascript - 为打字稿中的特定文件禁用 noUnusedLocals 和 noUnusedParameters
- java - Java继承构造函数
- node.js - Puppeteer:如何使用上下文节点评估 XPath?
- reactjs - 材质界面
不垂直对齐它的标签