此问题已连接到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