2013-06-11 88 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 

问候。