-2

作成したテーブルを fillMatrix 関数に渡す際に問題があります。もう 1 つは、関数内でこのテーブルを参照する方法です。あらゆる種類の助けに本当に感謝しています。コンソールの問題はありませんでした。プログラムがフリーズしています。

int **createTable(int n) 
{
    int **table = new int*[n]; 
    for(int i = 0; i<n; i++)
    {
        table[i] = new int[n];
    }
    return table;
}

void fillMatrix(int n, int **tab) 
{
    for(int x = 0; x<=n; x++)
    {
        for(int y= 0; y<=n; y++)
        {
            tab[x][y] = 0;
        }
    }
}  


int main()
{
    int n;
    cout <<"Add size of table";
    cin >> n;
    int **table = createTable(n);

    srand(time(NULL));

    fillMatrix(n, table);


    return 0;
}
4

2 に答える 2

7

あなたのコードには 1 つの問題しかありません。

for(int x = 1; x <= n; x++)
{
    for(int y = 1; y <= n; y++)
    {
        tab[x][y] = 0;
    }
}

C++ の配列はゼロから始まりますが、未定義の動作tab[n][n]を引き起こす代入を試みました。

また、deleteアレイが不要になったら、アレイを使用する必要があります。


std::vector別の解決策として、動的に割り当てられた配列の代わりに使用することをお勧めします。

于 2013-04-20T13:38:42.560 に答える
0

それは彼らがあなたに言ったことです。forステートメントは次のようになります

for( int i = 0 ; i < n ; i++ )   

それ以外の

for( int i = 0 ; i <= n ; i++ )

コンパイラは、配列のサイズを誤って超えた場合に警告したいので、警告やエラーが発生しませんでした。

上記で提案したように、配列の代わりにベクトルを使用することを考えてください。

于 2013-04-20T14:12:20.970 に答える