我刚开始学习malloc&d以及realloc< d阵列。任何人都可以帮我解释如何正确释放我的以下阵列?我曾尝试查看其他帖子,但我很难理解C中的内存分配。
char ** result = NULL;
int numSpaces = 0;
char * p = strtok(command, " ");
/* split string and append tokens to 'result' */
while (p)
{
result = realloc (result, sizeof (char*) * ++numSpaces);
if (result == NULL)
exit (-1); /* memory allocation failed */
result[numSpaces-1] = p;
p = strtok(NULL, " ");
}
答案 0 :(得分:4)
释放realloc
- 内存与释放malloc
内存并没有什么不同,因为您需要的最后一点是free
上的result
,当你不再需要记忆时。
但是,您的代码有一种可能导致内存泄漏的模式:您将realloc
- ed块分配回result
而不检查NULL
。如果realloc
失败,result
的先前值将无法恢复,因为它已被NULL
覆盖。
以下是解决此问题的方法:
char **temp = realloc(result, sizeof (char*) * ++numSpaces);
if (temp == NULL) {
free(result); // Free the old memory block
exit (-1); /* memory allocation failed */
}
result = temp;
答案 1 :(得分:3)
在您完成result
之后的某个时刻,您需要致电free(result);
。
这可能如下所示:
char ** result = NULL;
int numSpaces = 0;
char * p = strtok(command, " ");
while (p) {
result = realloc (result, sizeof (char*) * ++numSpaces);
result[numSpaces-1] = p;
p = strtok(NULL, " ");
}
for (i=0; i<numSpaces; ++i)
printf("word %d: %s\n", i, result[i]);
free(result);