私はMatrixMxNというクラスを持っています。コンストラクタには、パラメータの行、列があります。私はこれを行うと、問題を取得していたが、私は、寸法の行、列を有する2次元アレイのメモリを割り当てようとしてい.. メモリ(実行時)を正しく管理する方法C++
{
MatrixMxN coord(4, 1);
coord(0, 0) = 1.0;
coord(0, 1) = 1.0;
coord(0, 2) = 1.0;
coord(0, 3) = 1.0;
}
ザ(Iは各エントリに値を割り当てる括弧演算子をオーバーライドしています)私が直面している問題は、デコンストラクタが呼び出されたときにエラーが発生したようです。 -
WindowsがMatrixTest.exeでブレークポイントをトリガしました。 これは、ヒープが破損している可能性があります。これは、MatrixTest.exeまたはロードしたDLLのバグを示します。
私の行列クラスのスニペットは次のとおりです。
typedef float* floatPtr;
class MatrixMxN {
private:
float** entry;
int rows;
int cols;
public:
MatrixMxN(int r, int c) {
rows = r;
cols = c;
//Create a matrix
if(rows > 0 && cols > 0) {
//Declare an array of pointers
entry = new floatPtr[rows];
//Declare each array
for(int i=0; i<rows; i++) {
entry[i] = new float[cols];
}
this->empty();
}
}
~MatrixMxN() {
//Free memory
for(int i=0; i<rows; i++) {
delete[] entry[i];
}
//Free pointers array
delete[] entry;
}
void empty() {
for(int i=0; i<rows; i++) {
for(int j=0; j<cols; j++) {
entry[i][j] = 0;
}
}
}
// Assignment operator
void operator=(MatrixMxN& other) {
//Check they are the same size
assert(rows == other.rows && cols == other.cols);
//Copy
for(int i=0; i<rows; i++) {
for(int j=0; j<cols; j++) {
entry[i][j] = other(i, j);
}
}
}
float& operator()(const int irow, const int icol) {
//Check they are not out of bounds
assert ((irow >= 0 && irow < rows) || (icol >= 0 && icol < cols));
return entry[irow][icol];
}
...
エラーをトリッピングする部分は、ループ内のデコンストラクタにあります。
//Free memory
for(int i=0; i<rows; i++) {
delete[] entry[i];
}
dbgheap.cファイルは、I = 0 [i]は[]エントリを削除する最初の試みにエラーをスロー。行列を印刷するときは意図したとおりにうまく動作しますが、ここではエラーが発生しているようです。うまくいけば、私は十分な情報をここに提供してくれた、ありがとう。
EDIT1:含ま代入演算子のオーバーロード EDIT2:付属()過負荷
回答: 問題は、私は、私はそれを持っていたかではなく、転置的に値を入力しました。メモリはここで壊れていた、すべての助けに感謝します。
さて、コンストラクタに 'else entry = NULL'がありませんが、それ以外は'() 'がオーバーロードされていますか?そうでない場合、 'coord(0、0)= 1.0;は何ですか? –
はい()をオーバーロードしました。上記の編集を含めました^ –