2016-01-10 132 views
0

我有一個2d指針,我用它作爲矩陣。對於每一行都包含偶數的數字,我想添加另一行,它會包含元素的總和。 爲前:矩陣作爲2d指針C

初始

1 1 1 

12 14 16 

3 3 3 

最終

1 1 1 

12 14 16 

3 5 7 

3 3 3 

我有下面的代碼,我想我有一個移誤差可以somedoy給我一些sugestions。

#include <stdio.h> 
#include <stdlib.h> 

int suma(int x)  //sum function 
{ 
    int s = 0, r = 0; 
    while (x != 0) 
    { 
     r = x % 10; 
     s = s + r; 
     x = x/10; 
    } 
    return x; 
} 

int main(void) 
{ 
    int i, j, n, m, p, q, ii, **a, par = 0,r; 
    printf("nr de rows\n"); 
    scanf("%d", &m); 
    printf("columns\n"); 
    scanf("%d", &n); 
    a = (int**)malloc(m*sizeof(int*)); 
    for (i = 0; i < m; i++) 
    { 
     a[i] = (int*)malloc(n*sizeof(int)); 
    } 
    for (i = 0; i < m; i++) 
    { 
     for (j = 0; j < n; j++) 
     { 
      printf("a[%d][%d]=", i + 1, j + 1); 
      scanf("%d", &a[i][j]); 
     } 
    } 
    printf("\n\n\nmatricea initiala\n"); //initial matrix 
    for (i = 0; i < m; i++) 
    { 
     for (j = 0; j < n; j++) 
     { 
      printf("%d\t", a[i][j]); 
     } 
     printf("\n"); 
    } 
    for (i = 0; i < m; i++) 
    { 
     for (j = 0; j < n; j++) 
     { 
      if (a[i][j] % 2 == 0) 
      { 
       par++; 
      } 
      else 
      { 
       par = 0; 
      } 
     } 
     if (par == n) 
     { 
      m++; 
      a = (int**)realloc(a, m*sizeof(int*)); 
      a[m] = (int*)malloc(n*sizeof(int)); 
      for (p = m; p >i; p--) 
      { 
       for (q = 0; q < n; q++) 
       { 
        a[p][q] = a[p - 1][q]; 
       } 
      } 
      par = 0; 
      for (r = 0; r < n; r++) 
      { 
       a[i + 1][r] = suma(a[i][r]); 
      } 
      i--; 
     } 
     par = 0; 
    } 
    printf("\nmat finala\n");  //final matrix 
    for (i = 0; i < m; i++) 
    { 
     for (j = 0; j < n; j++) 
     { 
      printf("%d\t", a[i][j]); 
     } 
     printf("\n"); 
    } 
} 

回答

3

固定點:

1. return x; - >return s;
2. for (i = 0; i < m; i++) - >for (i = m-1; i >= 0; --i):從底部到的realloc,a[m] = (int*)malloc(n*sizeof(int));後頂部
3.at的方法 - >a[m-1] = (int*)malloc(n*sizeof(int));:a [m]超出範圍。
4. for (p = m; p >i; p--) - >for (p = m-1; p >i+1; p--)
5. i--; - >//i--;:它不再需要。

+2

它只是多餘的。不是一個錯誤。 – BLUEPIXY

+2

@ryyker它在哪裏寫入標準? – BLUEPIXY

+0

它的工作原理,但可以給2 3和4如此aditional信息。 – Gabriel