这是一个非常简单的程序。它读取一个大小为mn的矩阵,然后通常会向后打印偶数行和正常的偶数行,第0行是第1行,依此类推。由于某种原因,它只是停止工作。我希望有人可以指出我的错误,我已经尝试了很多解决方案,但它们似乎都没有。提前谢谢。
#include<stdio.h>
#include<stdlib.h>
int main(){
int m,n,i,j;
int **a;
scanf("%d%d",&m,&n);
fflush(stdin);
a=(int**)malloc(sizeof(int*)*m);
for(i=0;i<n;i++){
a[i]=(int*)malloc(sizeof(int)*n);
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
fflush(stdin);
}
}
for(i=0;i<m;i++){
if((m+1)%2==0){
for(j=0;j<n;j++){
printf("%d ",a[i][j]);
}
}
else{
for(j=n;j!=0;j--){
printf("%d ",a[i][j]);
}
}
printf("\n");
}
return 0;
}
答案 0 :(得分:0)
for(i=0;i<m;i++){ // <==
a[i]=(int*)malloc(sizeof(int)*n);
}
您必须分配总共m
个数组,而不是n
然后调整
for(j=n-1;j>=0;j--){
j
必须保持在0
和n-1
修改强>
这里有另一个错误:
if((m+1)%2==0){ // <-- wrong
正确
if((i+1)%2==0){
如果计算行,假设第一个是奇数(nr.1),那么即使是行(那些将被正常打印的行)也会产生真值
顺便说一下:
1)您应该熟悉调试器的使用。你会立即发现这些错误。 (并且你不应该使用Stack Overflow作为“请调试我的代码服务”。但我很乐意提供帮助..)
2)你不应该转换malloc
的返回值,例如
a[i]=malloc(sizeof(int)*n);
3)你应该在程序结束时释放分配的内存:
free(a); // <-----
return 0;
}
答案 1 :(得分:0)
正如Paolo所说,您正在分配总共n
个数组,但您需要分配m
。在代码的第9行,这是:
for(i=0;i<n;i++){
必须从0
到m
而不是n
加上Paolo提到的另一个调整,一个与j
的值相关的调整。
我认为您使用m
哪个值永远不会更改,因此您的“偶数与否”验证可能会遇到问题,使用i
即可。