如何管理C中函数返回的内存

时间:2013-05-25 18:15:26

标签: c memory return substring free

我想制作一个像这样工作的标记化子程序:

  • 阅读用户输入
  • 查找代币
  • 使用子字符串函数获取每个标记
  • 将每个令牌存储在结构

这个想法很简单(我想),但我提出了一个难题。在创建子串函数时,我意识到它是一个内存泄漏漏洞。我能想到创建子串函数的唯一方法是:

    char* sub = ( char* ) malloc ( ( some_length + 1 ) * sizeof( char ) );

    for ( i = start_index ; i < some_length ; i++ )
    {
         sub[ i - start_index ] = source_string[i];
    }

    sub[ some_length ] = '\0'

    return sub;

但问题是,当使用子字符串函数时,我将无法在之后释放该内存。

    // Example usage

    TokenStruct* MyToken = CreateToken( substring( input , start , length ) );

有些人可能会建议我在CreateToken函数中释放内存,但这对我来说似乎是一个非常糟糕的主意,因为它会使CreateToken的代码非常依赖于子字符串函数。此外,substring函数可能在许多其他函数中使用。

我想知道在终止程序之前保留一个指针表并释放它们但看起来有点粗略......

你觉得伙计们怎么样?处理这类问题的最佳方法是什么?

提前致谢!

1 个答案:

答案 0 :(得分:3)

这是C和其他相同类型语言中非常常见的问题。基本上有三种解决方案:

  1. 要么单独进行呼叫,然后再释放内存。
  2. 将指针保留在对象中(在您的情况下为MyToken),并在释放对象时释放该字符串。
  3. 使用数组,并将其(最大长度)传递给函数。
  4. 由于创建的指针在对象的生命周期中必须是“活的”(MyToken),所以我建议使用方法二。