2012-07-18 56 views
1

我有一個字符串數組,如何realloc()的內存字符串數組

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

現在我需要realloc的內存陣列,因爲我有另一種元素插入到像「了hi5」數組。我怎樣才能做到這一點?

我想:

string_arr = realloc (.....); 

,但它不能正常工作,它給了: 「不兼容的類型分配」 的錯誤。

+0

sizeof(string_arr [0]);沒有給出正確的空間。其他元素有3個字符,但第0個元素是2個字符 – 2012-07-18 17:43:19

回答

3

有兩個問題與您的代碼:

1)您正試圖realloc()的一個固定大小的數組。只能在使用malloc()分配的內存上使用realloc()。

2)string_arr是一個數組,而不是指針。當用作表達式中的rvalues時,數組會退化爲指針,但仍然是不同的數據類型作爲左值。

+0

太好了,謝謝。我明白了 – Frank 2012-07-18 19:04:51

3

你只能「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 (...); 
... 
+0

...或之前由'calloc()'或'realloc()'返回的字符。 – 2012-07-18 18:12:01

+0

Hummm ...上面的代碼示例的最後一行,如果'realloc'失敗會發生什麼,'string_array'上有內存泄漏... – t0mm13b 2012-07-18 20:13:17

2

不能realloc數組尚未malloc -ed。

0

創建一個大小爲+1的新數組,將元素從初始數組傳遞到新數組。

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()來擴展內存。

相關問題