【发布时间】:2012-09-27 20:57:43
【问题描述】:
我有一个内存分配问题。如果我在else 块中声明char*,这意味着char* 在else 块执行完毕时被销毁。 else 块位于 while 循环中,因此它会迭代很多次。但是,如果在 else 块中声明的 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);
}
(截图)
我想指出,在我知道它不会再次执行之后,我在程序末尾执行了 free print_path。但是,我想释放的是循环的中间执行。任何帮助,将不胜感激。 谢谢!
【问题讨论】:
-
您混淆了堆栈分配和堆分配的内容。您不是在释放指针,而是在释放指针指向的内存。
-
在循环的每次迭代中释放的意义何在?你知道在循环期间你将需要那段内存,释放和重新分配在这里没有多大意义。
-
@JordanKaye 在每次迭代期间释放的要点是因为不再需要前一次迭代的动态分配变量。如果在足够长的数据样本上运行,则将没有内存。在不再需要时释放所有 malloc 变量也是一种很好的编程习惯。