我有一个内存分配问题。如果我在 else
block 中声明 char*
,则意味着当 else
block 被破坏时,char*
将被销毁。执行完毕。 else
block 位于 while
循环中,因此它将迭代多次。但是,如果 else
block 中声明的 char*
被别名为 malloc'd
变量,如下例所示。我的问题是我如何收取这样的费用?我觉得如果我释放 temp char* 变量,我会导致段错误,因为我也会释放我想保留的变量。如果是这种情况,我就不知道 free
语句的去向。
char* print_path = NULL;
(截图)
(while)
else{
char* temp_path = print_path;
int temp_size = strlen(temp_path)+strlen(file_name(child->fts_path))+1;
print_path = (char*)malloc(temp_size);
strcpy(print_path, temp_path);
strncat(print_path, file_name(child->fts_path), strlen(file_name(child->fts_path)));
printf("%s:\n\n", print_path);
}
(截图)
我想指出的是,在我知道程序不会再次执行后,我在程序末尾释放了 print_path 。然而,我想释放的是循环的中间执行。任何帮助,将不胜感激。 谢谢!
最佳答案
看起来free(temp_path)
是正确的。它应该是这样的:
char * print_path = malloc(...); // "NULL" is also possible
while (condition)
{
if (...)
{
// ...
}
else
{
char * temp_path = print_path;
print_path = malloc(...);
free(temp_path);
}
}
free(print_path);
算法中的不变性是(或应该是)print_path
始终指向动态分配的内存。请注意,我们如何为每个 malloc
精确地分配一个 free
。
关于c - 内存分配C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12629912/