我试图以相反的方式填充一个二维数组,但是我总是得到相同的错误:核心转储。
当我说相反的意思时,通常我们会做类似的事情
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));
您正在为
1
的int
元素分配空间,而应该为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/