gpt4 book ai didi

c - 如何管理从 C 函数返回的内存

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:10 25 4
gpt4 key购买 nike

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

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

这个想法很简单(我认为),但我想出了一个难题。在做substring函数的时候,才发现是内存泄漏的漏洞。我能想到的制作子字符串函数的唯一方法是:

    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;

但问题是,当使用 substring 函数时,之后我将无法释放该内存。

    // Example usage

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

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

我有一个想法在终止程序之前保留一个指针表并释放它们,但似乎有点粗略......

小伙伴们怎么看?处理此类问题的最佳方法是什么?

提前致谢!

最佳答案

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

  1. 要么单独调用,然后释放内存。
  2. 将指针保留在对象中(在您的情况下为 MyToken),并在释放对象时释放字符串。
  3. 使用数组,并将其(与最大长度一起)传递给函数。

既然创建的指针无论如何都必须在您的对象 (MyToken) 的生命周期内“有效”,那么我建议使用第二种方法。

关于c - 如何管理从 C 函数返回的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16752566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com