我有一些递归函数,但我需要解析一个字符串,我不知道该字符串可以有多长。为此分配内存的适当方式是什么?
答案 0 :(得分:6)
当你耗尽到目前为止分配的内存时,使用realloc()增加字符串大小。
每个realloc至少应该是你的字符串大小的两倍 - 那么重新分配所花费的总时间将不会渐近地变化,与一次必要长度字符串的幸运分配相比。
答案 1 :(得分:1)
要么你需要传入字符串的大小,以便你可以分配足够的内存,或者你必须对字符串的最大长度设置一些合理的限制,比如说1024个字符。
答案 2 :(得分:0)
如果你无法找到确切的尺寸(或者它太贵了),你应该假设一些价值。如果你可以估计字符串不会超过的最大大小,你可以只分配一个大小的缓冲区(填充字符串后可能realloc()
,以避免浪费空间。)
如果你不能假设这样的最大值,你应该像Pavel建议的那样 - 假设一些可能的值,然后在字符串出现时扩展该区域。
答案 3 :(得分:0)
在Unix(FreeBSD)上,你也可以使用reallocf()。