私はある種の再帰関数を持っていますが、文字列を解析する必要があります。文字列の長さはどれくらいか分かりません。そのためにメモリを割り当てるにはどのような方法が適していますか?サイズがわからない場合、どのようにメモリをcharポインタに割り当てるのですか?
答えて
realloc()を使用すると、今まで割り当てたメモリを使い切ったときに文字列サイズを大きくすることができます。
各reallocは文字列のサイズを少なくとも2倍にする必要があります。再配置に費やす全体の時間は、必要な長さの文字列を一度に幸運にも割り当てたのと比べて漸近的に変化しません。
各割り当てでサイズを倍増するという魔法はありませんが、私は同意します。 1より大きい定数を掛け合わせる限り、O(n^2)ではなくO(n)にとどまります。 2が普及していますが、1.01を使用すると同じ時間の複雑さが得られます。ちょうどはるかに大きな定数です。 –
十分なメモリを割り当てることができるように、渡される文字列のサイズを持たせるか、文字列の最大長に適度な制限(たとえば1024文字)を設定する必要があります。
または3.オプションを使用して、妥当なサイズのメモリを割り当て、必要に応じてrealloc()します。 (再帰関数を使って文字列を直接返すか、渡されたchar **を使って操作する) – nos
正確なサイズがわからない(または値段が高すぎる)場合は、単に値を取る必要があります。文字列が超えない最大サイズを見積もることができれば、そのサイズのバッファを割り当てることができます(スペースを浪費することを避けるために、文字列を埋め込んだあとrealloc()
にすることもできます)。
このような最大値を取ることができない場合は、Pavelの示唆のように動作する必要があります。可能な値を想定し、領域が文字列として発生するように展開します。
Unix(FreeBSD)では、reallocf()を使用することもできます。
- 1. char配列とcharポインタの '\ 0'にメモリが割り当てられていない場合はどうですか?
- 2. char *の配列へのポインタにどのようにメモリを割り当てるのですか?
- 3. メモリがクラスに割り当てられている場合
- 4. 割り当てられていない場合、intとcharの固定割り当てはありますか?
- 5. 内部メモリが既にヒープに割り当てられている場合、オブジェクトのメモリをヒープに割り当てる必要がありますか?
- 6. mallocがcharのメモリを割り当てていない*
- 7. メモリ割り当てchar *とchar []
- 8. 構造体C++のcharポインタにアクセスしてメモリを割り当てます。
- 9. ポインタをインクリメントするとポインタに割り当てられるメモリのサイズが変更されます
- 10. const charポインタの割り当て
- 11. UNIX fork後に動的に割り当てられたメモリへのポインタはどうなりますか?
- 12. ポインタとCでのメモリ割り当て
- 13. C言語のchar *にメモリが正しく割り当てられないのはなぜですか?
- 14. タイプのメモリを割り振る方法は、そのサイズがわからない場合はどうすればいいですか?
- 15. コンストラクタへのcharポインタのためにメモリを割り当てる必要はありますか?
- 16. 既に新しい変数名が割り当てられている場合、どのように新しい変数名を割り当てますか? Ruby
- 17. C++ new/new []、どのようにメモリを割り当てるのですか?
- 18. ポインターのポインタとメモリの割り当て
- 19. メニューに場所が割り当てられているかどうかをチェック
- 20. C++ポインタとメモリの割り当て
- 21. このように割り当てられたメモリの割り当てを解除するにはどうすればいいですか?A&o = *(new A)?
- 22. 大きな配列はどのようにメモリを割り当てますか?
- 23. C++でchar *にメモリを割り当てる
- 24. すでに割り当てられている変数にメモリを割り当てていますか?
- 25. 端末からテキスト文字列にメモリを割り当てるにはどうすればよいですか?
- 26. メモリ割り当てはどのようにスケーラで行われるのですか
- 27. EnumはどのようにCにメモリを割り当てますか?
- 28. SelectSingleNode.valueが見つからない場合にstring.emptyを割り当てます
- 29. ローカル(共有)メモリが実際にどのように割り当てられていますか?
- 30. mallocは割り当てられたメモリへのポインタを返す
コンテキストやサンプルコードがありますか? – fbrereto
文字列を解析している場合は、文字列*を持っていますか?それはchar *または何か、右として渡されますか?その場合、そのパーツにメモリを割り当てる必要はありません。 – Cheeso
Tooooooooo曖昧。 –