【问题标题】:I get segmentation fault when I try to insert new row into 2D-Array using realloc当我尝试使用 realloc 将新行插入 2D-Array 时出现分段错误
【发布时间】: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


【解决方案1】:

这是你的问题。

for( i=1;i<n;i++)
    a[i]=a[i-1]+m;

您正在为a[i] 分配任意指针,当您尊重它们时,它会引发分段错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多