2013-06-11 86 views
1

此問題已連接到this question。 我定義字符的陣列,每個的150b和一個字符串複製到它爲:指針數組並動態分配內存字符串

const gchar *strAuth; 
gchar *strings[18][150]; 
strcpy(strings[0],strAuth); 

這是巨大的存儲器浪費大部分的情況下,並且可能不足以用於某些極端情況下。

正如問題中提到的那樣,「爲指針創建一個數組併爲其動態分配內存」是一個更好的主意。

我該如何做到這一點? 請幫忙。

+1

爲什麼不能使用鏈接列表而不是使用數組?這解決了內存浪費問題 – VoidPointer

+0

@VoidPointer與指針數組相比,它究竟如何解決任何內存浪費?問題是每個字符串分配的150個字節,而不是每個指針分配的4個字節。所以鏈表在這裏並沒有真正添加任何東西,特別是因爲你需要額外的開銷,每個節點下一個指針的形式。 – Lundin

回答

3

您希望使用malloc爲您的字符串分配空間,並將指針返回到您要分配的字符串中的每個x的gchar *strings[x]。是這樣的:

gchar *strings[18]; 
strings[0] = malloc(strlen(strAuth) + 1); 
strcpy(strings[0], strAuth); 

這是一個指針數組(線1)和用於包括空終止(第2行)的字符串的存儲器的動態分配。

當您完成strings中的特定字符串時,您需要free它(請參閱相同的手冊頁)與free(strings[0]);。我建議你在釋放它們之後將任何已經釋放的指針設置爲NULL。

-1

試試這個

gchar *strings[18]; 
strings[5] = (char*)malloc(sizeof(gchar)*150); //to reserve space in memory 
strcpy(strings[5],strAuth); 
free (strings[5]); // to delete used buffer 

問候。