在C中重新分配二维数组

时间:2017-04-05 23:35:00

标签: c arrays realloc

所以我已经看到了一些与此相关的问题,但没有一个真正过于描述或者向我解释 所以我试图改变字符串数组中的字符串数量,例如array [3] [155] realloc()到数组[4] [155] 创建4个字符串,每个字符串包含155个字符,然后可以通过fgets(array [4],155,stdin)进行修改; 然后打印出新数组

我的尝试

 #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main () {
    int arrays = 3;
    int pnm = 0;
    char array[arrays][155]; //Default size is 3 you can change the size
    strcpy(array[0], "Hello from spot 0\n");
    strcpy(array[1], "Sup from spot 1\b");
    strcpy(array[2], "Sup from spot 2");
    while(pnm != arrays) {
        printf("Word %d: %s", pnm, array[pnm]);
        pnm++;
    }
    realloc(array, 4);
    strcpy(array[3], "Sup from spot 3!");
    printf("The array is now.\n");
    pnm = 0;
    while(pnm != 4) {
        printf("%s", array[pnm]);
        pnm++;
    }

}

在控制台输出中

bash-3.2$ ./flash
Word 0: Hello from spot 0
flash(1968,0x7fff70639000) malloc: *** error for object 0x7fff5828f780: pointer being realloc'd was not allocated
*** set a breakpoint in malloc_error_break to debug
Word 1: Sup from spot Word 2: Sup from spot 2Abort trap: 6
bash-3.2$

1 个答案:

答案 0 :(得分:1)

您收到的错误消息非常好:

pointer being realloc'd was not allocated

如果要使用realloc,则需要传递NULL指针或使用mallocrealloc等函数动态分配的指针。您传递的指针是存储在堆栈中的数组,该数组与堆不同,并且没有重新分配功能。

我也看到你用{4}的参数调用reallocrealloc函数无法知道数组的结构或它的元素有多大,所以你需要通过你需要的字节数。

此外,您需要将realloc返回的指针存储在某处,最好是在检查它不是NULL之后。如果realloc返回非NULL指针,则应该忘记传递给它的原始指针。