在c ++中使用动态多维数组

时间:2009-09-24 13:35:18

标签: c++ multidimensional-array

我正在制作一个C ++程序,用于检查给定的aray是否为latin square。我需要使用一个存储给定拉丁方的动态多维数组。但我不能将数组传递给执行检查的函数...

目前我有这样的代码来调用函数:

int squaretest(int **p, int n, int sum) {

    //some code
};

此代码用于创建数组:

int main() { 

    //some code. n - length of one row, sum - sum of elements in one row.
    int a;  
    int **lsquare;
    lsquare = new int*[n];
    for (int i=0;i<=n-1;i++) for (int j=0;j<=n-1;j++) {
        cin >>a;
        lsquare[i][j] = a;
    }
    blocktest(lsquare,n,sum);
    //some code
};

代码编译(我正在使用Geany IDE和G ++编译器)但是当我在终端中运行它时,在第一次输入后,必须存储在块[0] [0]中我得到分段错误< / em>错误。我的代码有什么问题,什么是正确的溶剂?

6 个答案:

答案 0 :(得分:7)

能够做到这一点..你实际上需要这样做:

int **lsquare = new int*[n];

for (int i=0; i<n; ++i)
    lquare[i] = new int[n];

for (int i=0; i<n; i++)
    for (int j=0; j<n; j++)
        cin >> lsquare[i][j];

blocktest(lsquare,n,sum);

更好的系统是:

int *lsquare = new int[n*n];

for (int i=0; i<n; ++i)
    for (int j=0; j<n; ++j)
        cin >> lsquare[i + j*n];

blocktest(lsquare, n, sum);

答案 1 :(得分:2)

你忘了为矩阵的第二维分配内存。

int **lsquare;
lsquare = new int*[n];
for (int i=0; i<n; ++i){
  lsquare[i] = new int[n];
....}

没有人写

for (int i=0;i<=n-1;i++){...}

改为

for (int i=0; i<n; ++i){...}

答案 2 :(得分:0)

你在lsquare中有一个指针数组。

您可能只想做以下事情:

lsquare = new int[n * n];

然后你可以填写这个方块,但那个类型是:

int *lsquare

答案 3 :(得分:0)

实际上是在创建一个数组数组。您不仅需要使用new分配数组数组,还必须分配所有n数组。您希望嵌套for循环的外部循环分配每个n个子数组。

lsquare = new int*[n];
for (int i=0;i<=n-1;i++) 
{
    lsquare[i] = new int[n];
    for (int j = 0;j<=n-1;j++)
    {
    //...

答案 4 :(得分:0)

你自己做了一个指针指针,可以用作矩阵,为它分配一行,然后就像你分配了一个完整的n * n矩阵一样。如果你运行它,你确实会遇到一个段错误。

你需要为n * n个元素分配足够的空间,而不仅仅是n个元素。

不易出错的解决方案可能是使用std :: vector std :: vectors。

答案 5 :(得分:0)

你必须为第二个维度分配空间,在分配lsquare后添加它:

for(int i = 0; i < n; ++i)
{
    lsquare[i] = new int[n];
}