我正在尝试以相反的方式填充二维数组,但我总是收到相同的错误:核心转储。
当我说相反的方式时,我的意思是,通常我们会做这样的事情
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));
您正在为int
的1
元素分配空间,您应该在其中为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]
都表示一个包含其所有列的完整行,这对于大多数情况来说要实用得多。
在这种形式中,您将能够声明处理单个记录的函数,而不是将整个"表"交给它。