作为介绍,我在 Visual Studio 2010 中使用 C++,为 x64 编译。我有一个程序使用二维数组来存储数据,以便通过我无法控制的 C 风格函数运行:
float **results;
results = new float*[rows];
for (int i = 0; i < rows; ++i){
results[i] = new float[columns];
}
int **data;
data = new int*[rows];
for (int i = 0; i < rows; ++i){
data[i] = new int[columns];
}
//send data to the function and populate results with values
ExternalFunction(*data, *results);
//delete everything
for (int i = 0; i < rows-1; ++i){
delete [] &results[i];
delete [] &data[i];
}
delete [] results;
delete [] data;
这会导致 VS10 通过 _BLOCK_TYPE_IS_VALID(pHead -> nBlockUse) 的调试断言失败。这发生在程序结束时,无论在包含删除的最后几行中实际发生了什么。这到底是什么意思?我究竟做错了什么?我觉得它真的很简单,但是我一直在看这个代码太久了。
--EDIT--- 由于 dasblinkenlight 对我的大脑的帮助,问题得以解决!
float *results = new float[rows * columns];
float *data = new float[rows * columns];
ExternalFunction(&data[0], &results[0]);
delete [] results;
delete [] data;