我有一个字符串数组,
char *string_arr[] = { "Hi", "Hi2", "Hi3", "Hi4" };
现在我需要为数组重新分配内存,因为我必须在数组中插入另一个元素,比如“Hi5”。我怎样才能做到这一点?
我试过:
string_arr = realloc (.....);
但它不起作用,它给出:“分配中的不兼容类型”错误。
您只能“realloc()”指向从“malloc()”获得的内存的指针。
char **string_arr;
int nelms = 10;
string_array = (char **)malloc (sizeof (char *) * nelms);
if (!string_array) {
perror ("malloc failed");
return;
}
string_array[0] = strdup ("Hi");
string_array[1] = strdup ("Hi2");
string_array[2] = strdup ("Hi3");
string_array[3] = strdup ( "Hi4");
...
string_array = realloc (...);
...
您不能realloc
使用尚未malloc
-ed 的数组。
您的代码有两个问题:
1)您正在尝试重新分配()一个固定大小的数组。realloc() 只能用于使用 malloc() 分配的内存。
2) string_arr 是一个数组,而不是一个指针。数组在表达式中用作右值时确实会退化为指针,但作为左值仍然是不同的数据类型。
字符串数组的内存将在只读部分分配。
.section .rodata
.LC0:
.string "Hi"
.LC1:
.string "Hi2"
.LC2:
.string "Hi3"
.LC3:
.string "Hi4"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl $.LC0, -16(%ebp)
movl $.LC1, -12(%ebp)
.....
.....
不在堆中。所以你不能realloc()
用来扩展内存。
创建一个大小为 +1 的新数组,将元素从初始数组转移到新数组。