2015-01-11 24 views
0

guys :)我有一個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; 
} 
+2

你的意思是不正常工作?你得到一個錯誤?錯誤的結果?還有別的嗎? – Reti43

+0

使用'c'循環'''''',但是您使用'l'創建它。休息一下...... ;-) – alk

+1

它也可以幫助清理你的代碼,正確縮進它:減少噪音,提高認識... – alk

回答

1

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那麼你失去了rerference到原來的指針x[i]所以我會建議

void *tmp; 

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

例如,您可以在handleMallocFailureErrorProbablyRetryOrExitTheProgram()中使用free(x[i])

相關問題