【发布时间】:2013-12-14 22:13:06
【问题描述】:
当程序在第一个元素的最后一个数字和最后一个元素的最后一个数字除以 2 的情况下找到一行时,它应该将另一行添加到矩阵中。我需要使用动态分配来做到这一点。代码如下:
#include <stdio.h>
#include <malloc.h>
int **a;
int cifra(int n){
int c=0;
while (n)
{
c=n%10;
n/=10;`
}
return c;
}
int conditie(int i, int m)
{
if(cifra(a[i][0])%2==0 && a[i][m-1]%2==0)
return 1;
return 0;`
}
int main()
{
int i,j,n,m,k,l;
printf("n=");
scanf("%d",&n);
printf("m=");
scanf("%d",&m);`
a=(int**)malloc(n*sizeof(int*));
a[0]=(int*)malloc(n*m*sizeof(int));
for( i=1;i<n;i++)
a[i]=a[i-1]+m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
for(i=0;i<n;i++)
if(conditie(i,m))
{
n++;
a=(int**)realloc(a,n*sizeof(int*));
for(k=n-1;k>i;k--)
for (l=0;l<m;l++)
a[k][l] = a[k-1][l]; //the program seems to be crashing here
for(j=0;j<m;j++)
a[i+1][j]=-1;
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
free(a[0]);
free(a);
return 0;
}
【问题讨论】:
-
首先,正确格式化您的代码。其次,你显然在某个地方越界了。一些善良的灵魂可能会出现,为你调试整个程序,但我,一方面,并不真正喜欢挖掘别人的嵌套 if-thens 并找出为什么像
a[k][l]=a[k-1][l]这样的东西会破坏......
标签: c segmentation-fault multidimensional-array realloc