我想制作一个标记化子程序,它将像这样工作:
- 读取用户输入
- 查找令牌
- 使用子字符串函数获取每个标记
- 将每个标记存储在结构中
这个想法很简单(我认为),但我想出了一个难题。在制作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 的代码非常依赖于子字符串函数。此外,子字符串函数可能用于许多其他函数。
我有一个想法,在终止程序之前保留一个指针表并释放它们,但似乎有点粗略......
你们觉得怎么样?处理此类问题的最佳方法是什么?
提前致谢!