1

我有一个字符串数组,

char *string_arr[] = {     "Hi",  "Hi2", "Hi3", "Hi4"    };

现在我需要为数组重新分配内存,因为我必须在数组中插入另一个元素,比如“Hi5”。我怎样才能做到这一点?

我试过:

string_arr = realloc (.....); 

但它不起作用,它给出:“分配中的不兼容类型”错误。

4

5 回答 5

4

您只能“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 (...);
...
于 2012-07-18T17:38:42.907 回答
3

您不能realloc使用尚未malloc-ed 的数组。

于 2012-07-18T17:39:04.277 回答
3

您的代码有两个问题:

1)您正在尝试重新分配()一个固定大小的数组。realloc() 只能用于使用 malloc() 分配的内存。

2) string_arr 是一个数组,而不是一个指针。数组在表达式中用作右值时确实会退化为指针,但作为左值仍然是不同的数据类型。

于 2012-07-18T17:41:41.470 回答
2

字符串数组的内存将在只读部分分配。

      .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()用来扩展内存。

于 2012-07-18T18:04:58.033 回答
0

创建一个大小为 +1 的新数组,将元素从初始数组转移到新数组。

于 2012-07-18T17:40:06.417 回答