イントロとして、私はVisual Studio2010でC++を使用しており、x64用にコンパイルしています。2次元配列を使用して、制御できない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)でデバッグアサーションエラーを通過します。これは、削除を含む最後の数行で実際に何が起こっているかに関係なく、プログラムの終わりまでに発生します。これは正確にはどういう意味ですか?私は何が間違っているのですか?とてもシンプルな気がしますが、このコードをずっと見てきました。
--編集---dasblinkenlightが私の脳に役立つナッジのおかげで、問題は解決しました!
float *results = new float[rows * columns];
float *data = new float[rows * columns];
ExternalFunction(&data[0], &results[0]);
delete [] results;
delete [] data;