此問題已連接到this question。 我定義字符的陣列,每個的150b和一個字符串複製到它爲:指針數組並動態分配內存字符串
const gchar *strAuth;
gchar *strings[18][150];
strcpy(strings[0],strAuth);
這是巨大的存儲器浪費大部分的情況下,並且可能不足以用於某些極端情況下。
正如問題中提到的那樣,「爲指針創建一個數組併爲其動態分配內存」是一個更好的主意。
我該如何做到這一點? 請幫忙。
此問題已連接到this question。 我定義字符的陣列,每個的150b和一個字符串複製到它爲:指針數組並動態分配內存字符串
const gchar *strAuth;
gchar *strings[18][150];
strcpy(strings[0],strAuth);
這是巨大的存儲器浪費大部分的情況下,並且可能不足以用於某些極端情況下。
正如問題中提到的那樣,「爲指針創建一個數組併爲其動態分配內存」是一個更好的主意。
我該如何做到這一點? 請幫忙。
您希望使用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。
試試這個
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
問候。
爲什麼不能使用鏈接列表而不是使用數組?這解決了內存浪費問題 – VoidPointer
@VoidPointer與指針數組相比,它究竟如何解決任何內存浪費?問題是每個字符串分配的150個字節,而不是每個指針分配的4個字節。所以鏈表在這裏並沒有真正添加任何東西,特別是因爲你需要額外的開銷,每個節點下一個指針的形式。 – Lundin