我有一個字符串數組,如何realloc()的內存字符串數組
char *string_arr[] = { "Hi", "Hi2", "Hi3", "Hi4" };
現在我需要realloc的內存陣列,因爲我有另一種元素插入到像「了hi5」數組。我怎樣才能做到這一點?
我想:
string_arr = realloc (.....);
,但它不能正常工作,它給了: 「不兼容的類型分配」 的錯誤。
我有一個字符串數組,如何realloc()的內存字符串數組
char *string_arr[] = { "Hi", "Hi2", "Hi3", "Hi4" };
現在我需要realloc的內存陣列,因爲我有另一種元素插入到像「了hi5」數組。我怎樣才能做到這一點?
我想:
string_arr = realloc (.....);
,但它不能正常工作,它給了: 「不兼容的類型分配」 的錯誤。
有兩個問題與您的代碼:
1)您正試圖realloc()的一個固定大小的數組。只能在使用malloc()分配的內存上使用realloc()。
2)string_arr是一個數組,而不是指針。當用作表達式中的rvalues時,數組會退化爲指針,但仍然是不同的數據類型作爲左值。
太好了,謝謝。我明白了 – Frank 2012-07-18 19:04:51
你只能「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 (...);
...
...或之前由'calloc()'或'realloc()'返回的字符。 – 2012-07-18 18:12:01
Hummm ...上面的代碼示例的最後一行,如果'realloc'失敗會發生什麼,'string_array'上有內存泄漏... – t0mm13b 2012-07-18 20:13:17
不能realloc
數組尚未malloc
-ed。
創建一個大小爲+1的新數組,將元素從初始數組傳遞到新數組。
字符串數組的內存將分配在只讀部分。
.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()
來擴展內存。
sizeof(string_arr [0]);沒有給出正確的空間。其他元素有3個字符,但第0個元素是2個字符 – 2012-07-18 17:43:19