次のように機能するトークン化サブプログラムを作成したいと思います。
- ユーザー入力の読み取り
- トークンを探す
- 部分文字列関数を使用して各トークンを取得する
- 各トークンを構造体に格納する
アイデアは単純でした (と思います) が、難しい問題を思いつきました。部分文字列関数を作成するときに、メモリ リーク ホールであることに気付きました。部分文字列関数を作成することを考えることができる唯一の方法はこれです:
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 のコードが部分文字列関数に大きく依存するようになるため、これは非常に悪い考えのように思えます。また、部分文字列関数は、他の多くの関数で使用される場合があります。
プログラムを終了する前に、ポインターのテーブルを保持して解放するという考えがありましたが、大ざっぱなようです...
皆さんどう思いますか?この種の問題に対処する最善の方法は何ですか?
前もって感謝します!