2016-01-10 4 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): Процесс от дна до верхней
3.At после перераспределить, a[m] = (int*)malloc(n*sizeof(int)); - >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. – Gabriel

Смежные вопросы