【发布时间】:2015-04-14 11:50:23
【问题描述】:
我必须编写一个将给定字符串添加到字符串数组的函数。
char **add_string(char **array, const char *string)
{
array = realloc(array, (sizeof(string)) * sizeof(char *));
int i = 0;
while (array[i] != NULL){
i++;
}
array[i] = malloc((strlen(string) + 1));
strcpy(array[i], string);
array[i + 1] = NULL;
return array;
}
根据 Valgrid,目前我得到内存泄漏。我没有正确使用 malloc,但我不知道如何修复它。非常感谢您的帮助。
【问题讨论】:
-
在指针上使用
sizeof可以得到指针的大小,而不是指针指向的内容,所以你在realloc调用中所做的实际上是sizeof(char *) * sizeof(char *),这可能不是你想要什么。 -
一般来说,您只想在空间不足时使用
realloc,而不是作为在每次迭代中创建1-more的工具。在分配方案中,您通常从一些足以满足您需要的指针开始。 (例如32, 64, 128, 256, ...)即使使用256 pointers,也只需要很小的2k内存。在代码顶部创建一个方便的#define MAXS 256。您分配您的char **array = calloc (MAXS, sizeof *array);然后分配每个array[i](或仅分配strdup)。当(i == MAXS),你reallocMAXS * 2 * sizeof *array。
标签: c arrays string malloc valgrind