增加2D c阵列中的行数

时间:2017-05-12 08:23:50

标签: c arrays realloc

无法增加2d数组中的行,但列可以。

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

它正在运作:

void increasecolumn(int ** mas, int* n, int m){
    for (int i = 0; i < m; i++){
        int* tmp = realloc(mas[i], sizeof (*mas[i]) * ((*n) + 1));
         if (tmp){
            mas[i] = tmp;
         }
     }
     (*n) = (*n) + 1;
 }

但增加的行失败

 void increaserow(int ** mas, int n, int* m){
    int ** tmp = realloc(mas, sizeof(*mas) * ((*m) + 1));
     if (tmp){
        mas = tmp;
         for (int i = 0; i < 1; i++){
             mas[(*m) + i] = malloc(sizeof(*mas[(*m) + i]) * n);
         }
     }
     (*m) = (*m) + 1;
 }
 int main(int argc, char * argv[]) {
     int n = 3; // columns
     int m = 2; // rows
     int** mas = malloc(m*sizeof(*mas));
     for(int i = 0; i < m; i++){
         mas[i] = malloc(n*sizeof(*(mas[i])));
     }
     for(int i = 0; i < m; i++){
         for(int j = 0; j < n; j++){
             mas[i][j] = 0;
             printf("%d ", mas[i][j]);
    }
    printf("\n");
}
printf("\n");

increasecolumn(mas, &n, m);
for (int i = 0; i < m; i++){
    mas[i][n-1] = 1;
}

increaserow(mas, n, &m); // problem is here
for (int j = 0; j < n; j++){
    mas[m-1][j] = 0;
}

for(int i = 0; i < m; i++){
    for(int j = 0; j < n; j++){
        printf("%d ", mas[i][j]);
    }
    printf("\n");
}
   system("pause");
   return 0;
}

我使用这个答案Resizing 2D Arrays in C就像一个例子,错了。

Windows上的GNU项目调试器:

警告:FTH:(9152): *应用于当前进程的容错堆填充程序。这通常是由于以前的崩溃造成的。 *

0 0 0

0 0 0

编程接收信号SIGSEGV,分段故障 主存中的0x0000000000401821(argc = 1,argv = 0x7f1990)位于D:\IIIКурс! IIСЕМЕСТР\МатМодДослОп\ stud \ Untitled2.c:47
47:mas [m-1] [j] = 0;

0 个答案:

没有答案