动态2D字符数组

时间:2013-11-30 21:49:58

标签: c

我想动态分配我的2D char数组。在这里我尝试在循环中执行此操作,但它会让我出现分段错误错误。如果我删除" arr [length] = str;"一切都会安好的。但这不是我想做的事。

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

int main(void) {
    char** arr;
    int i = 0;
    int length = 0;
    for(i = 0; i < 4; i ++) {
        arr = (char**) realloc(arr, (length+1) * sizeof(char*));
        char* str = (char*) malloc(4 * sizeof(char));
        arr[length] = str;
    }

    return 0;
}

3 个答案:

答案 0 :(得分:3)

你可以做Guido所说的,但你最初也可以设置

char** arr = NULL;

因为当realloc获取NULL指针作为输入时,它表现为malloc。

我假设的循环必须是

for(i = 0; i < 4; i ++) {
     arr = (char**) realloc(arr, (length+1) * sizeof(char*));
     char* str = (char*) malloc(4 * sizeof(char));
     arr[length++] = str;
}

注意长度++。

答案 1 :(得分:0)

您在arr上使用realloc,但您从未为其分配空间。使用malloc

答案 2 :(得分:0)

根据手册:

  

realloc()函数改变指向的内存块的大小   通过ptr来调整字节大小。内容将在该范围内保持不变   从区域的起点到最小的和   新尺寸。如果新尺寸大于旧尺寸,则添加   内存不会被初始化。 如果ptr为NULL,则调用为   相当于malloc(size),适用于所有大小值;如果大小相等   为零,而ptr不为NULL,则调用相当于   免费(PTR)。除非ptr为NULL,否则它必须由a返回   之前调用malloc(),calloc()或realloc()。如果该区域指向   被移动,免费(ptr)完成。

因此,要使用realloc(),首次调用时应该传递NULL指针。因此,arr应初始化为NULL