c - 内存分配C

标签 c memory pointers free

我有一个内存分配问题。如果我在 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/

相关文章:

c - pthread 竞争条件,可疑行为

c - 将字符串设置为一个值并稍后使用它

c++ - 为什么要使用指针而不是对象本身?

c - 如何在决策 switch 语句中使用枚举

c - c中char数组的指针运算

java - 加载到内存中的文件比磁盘上的文件大

memory - 有一个用于填充的十六进制 "Name"生成器?

c# - 内存中的二维数组

更改函数内的指针

Coverity 对局部变量的默认初始化发出警告