-2

我在将创建的表传递给 fillMatrix 函数时遇到问题。另一件事是如何在我的函数中引用此表。我真的很感激每一种帮助。我没有遇到任何控制台问题。程序冻结。

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

我在您的代码中只看到一个问题:

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 回答