3

2D配列を作成して縮小する方法を練習しています。これは私の機能です:

void Resize(int rownums,int columnnums)
{
    MyMatrix newM(rownums,columnnums);
    for(int i=0;i<rownums;i++)
        for(int j=0;j<columnnums;j++)
            newM.table[i][j]=table[i][j];

    for(int i=0;i<rows;i++)
    for(int j=0;j<columns;j++)
    delete []table[j];

    delete[]table;
    rows=newM.rows;
    columns=newM.columns;
    table=new string*[rows];
    for(int i=0;i<rows;i++)
        table[i]=new string[columns];

    for(int i=0;i<rows;i++)
        for(int j=0;j<columns;j++)
            table[i][j]=newM.table[i][j];
}

問題は、デバッグアサーションが失敗したことです。何を間違えたのか、どうすれば修正できるのかわかりません!!! あなたが考えていることは何でも私を助けることができます!ありがとうございました

4

1 に答える 1

2

これは正しくありません:

for(int i=0;i<rows;i++)
for(int j=0;j<columns;j++)
delete []table[j];

すでに削除された配列が削除され、未定義の動作が発生するため、外側のループは必要ありません。

于 2012-11-18T19:28:07.097 に答える