我想制作一个像这样工作的标记化子程序:
这个想法很简单(我想),但我提出了一个难题。在创建子串函数时,我意识到它是一个内存泄漏漏洞。我能想到创建子串函数的唯一方法是:
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函数可能在许多其他函数中使用。
我想知道在终止程序之前保留一个指针表并释放它们但看起来有点粗略......
你觉得伙计们怎么样?处理这类问题的最佳方法是什么?提前致谢!
答案 0 :(得分:3)
这是C和其他相同类型语言中非常常见的问题。基本上有三种解决方案:
MyToken
),并在释放对象时释放该字符串。由于创建的指针在对象的生命周期中必须是“活的”(MyToken
),所以我建议使用方法二。