C语言 在 2d 数组中插入两行新行



>伙计们:)我有一个 2D 动态数组,我需要在每列中找到最大和最小的数字。我必须在我的数组中插入 2 行新行(最大和最小),但似乎我的realloc无法正常工作。请告诉我我做错了什么,我应该如何继续。

int **in(int l,int c);
void out(int l, int c, int **a);
int max_colonne(int l, int c, int **a,int *max);
int minimal_colone(int l, int c, int **a,int *minimal);
int main()
{
    int **x,*max,*minimal,l,c, i, j;
    printf("nombre de lignes: ");
    scanf("%d",&l);
    printf("nombre de colonnes: ");
    scanf("%d",&c);
    x=in(l,c);
    printf("La matrice cree.n");
    out(l,c,x);
    for(i=0;i<c;i++){
        x[i]=(int *)realloc(x, (l+2)*sizeof(int)); }

    free(x) ;
    free(max) ;
}
int **in(int l,int c)
{
    int **t,i,j;
    t=(int **)malloc(l*sizeof(int *));
    for(i=0;i<l;i++)
        t[i]=(int *)malloc(c*sizeof(int));
    for(i=0;i<l;i++)
        for(j=0;j<c;j++)
        {         printf("el[%d][%d]:",i,j);
            scanf("%d",(t[i]+j));
        }
    return t;
}
void out(int l, int c, int **a)
{
    int i,j;
    for(i=0;i<l;i++)
    {  for(j=0;j<c;j++)
        printf("%3d",*(a[i]+j));
        printf("n");
    }
}
int max_colonne(int l, int c, int **a,int *max)
{
    int i,j;
    for(j=0;j<c;j++,max++)
    {           *max=*a[j];
        for(i=0;i<l;i++)
            if(*(a[j]+i) > *max) *max=*(a[j]+i);
    } return *max;
}
int minimal_colone(int l, int c, int **a,int *minimal)
{
    int i,j;
    for(j=0;j<c;j++,minimal++)
    {           *minimal=*(a[0]+j);
        for(i=0;i<c;i++)
            if(*(a[i]+j) < *minimal) *minimal=*(a[i]+j);
    } return *minimal;
}

您的realloc不起作用,因为它是错误的,而不是

x[i]=(int *)realloc(x, (l+2)*sizeof(int)); 

它应该是

x[i] = realloc(x[i], (l + 2) * sizeof(int)); 

而且,您无需投射到int *.

您应该始终检查 malloc/realloc/calloc 函数的返回值,失败时它们返回 NULL ,因此为了安全地使用 realloc 您应该使用临时变量,以防止丢失原始指针,因为如果您这样做,请执行以下操作

x[i] = realloc(x[i], newSize);

并且realloc返回NULL然后您丢失了对原始指针的引用x[i]所以我会推荐

void *tmp;
tmp = realloc(x[i], newSize);
if (tmp == NULL)
    handleMallocFailureErrorProbablyRetryOrExitTheProgram();
x[0] = tmp;

例如,free(x[i])您可以在 handleMallocFailureErrorProbablyRetryOrExitTheProgram() .

最新更新