我想动态分配我的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;
}
答案 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
。