如何以相反的方式填充二维数组 - C



我正在尝试以相反的方式填充二维数组,但我总是收到相同的错误:核心转储。

当我说相反的方式时,我的意思是,通常我们会做这样的事情

for(int i=0; i<MaxColumns; i++)
   for(int b=0; i<MaxRows; b++)
      array[i][b] = random value;
我想

做的是对于每一行,我想在每一列上填充该单行,然后传递到下一行并执行相同的操作。此时,我正在为每列动态声明一个新行。

这就是我正在尝试的:

int i = atoi(argv[1]);
int **array = (int**)malloc(i * sizeof(int*)); 
for (lines =0; lines <MAXLINES; lines ++) { 
    for (colunms =0; colunms <i; colunms ++) {
        array[colunms] = (int*)malloc(1 * sizeof(int));
        v=colunms+lines;
        array[colunms][lines]=v;
    }   
}

错误还在继续:

array[colunms][lines]=v;

------问题----的最新更新

已经更新了,虽然我尝试了这段代码

for (lines =0; lines <MAXLINES; lines ++) { 
    array[colunms] = (int*)malloc(colunms * sizeof(int));
    for (colunms =0; colunms <i; colunms ++) {
        v=colunms+lines;
        array[colunms][lines]=v;
    }
}

我不断被核心倾倒在:

    array[colunms][lines]=v;

这很简单。而不是:

for(int i=0; i<MaxColumns; i++)
   for(int b=0; i<MaxRows; b++)
      array[i][b]=random value;

用:

for(int b=0; i<MaxRows; b++)
   for(int i=0; i<MaxColumns; i++)
      array[i][b]=random value;

您的错误在于:

array[colunms] = (int*)malloc(1 * sizeof(int));

您正在为int1元素分配空间,您应该在其中为colunms * sizeof(int)分配空间。您还应该在内部循环之外执行此操作,如下所示:

int **array = (int**)malloc(MAXLINES * sizeof(int*)); 
for (lines =0; lines <MAXLINES; lines ++) { 
    array[lines] = (int*)malloc(i * sizeof(int));
    for (colunms =0; colunms <i; colunms ++) {
        v=colunms+lines;
        array[lines][colunms] = v;
    }   
}

此外,即使此代码应该有效,将来将其假定为应该array[lines][colunms] array[colunms][lines]也可能是一个问题。

为什么?因为对于array[lines][colunms],每个array[line]都表示一个包含其所有列的完整行,这对于大多数情况来说要实用得多。

在这种形式中,您将能够声明处理单个记录的函数,而不是将整个"表"交给它。

相关内容

  • 没有找到相关文章

最新更新