我试图以相反的方式填充一个二维数组,但是我总是得到相同的错误:核心转储。

当我说相反的意思时,通常我们会做类似的事情

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));


您正在为1int元素分配空间,而应该为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[colunms][lines]假定为array[lines][colunms]的位置在将来也会成为问题。

为什么?因为对于array[lines][colunms],每个array[line]代表具有其所有列的完整行,这在大多数情况下更为实用。

通过这种形式,您将能够声明用于处理单个记录的函数,而不是将其交给整个“表”。

关于c - 如何以相反的方式填充二维数组-C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28931825/

10-11 21:31