我有某种递归函数,但我需要解析一个字符串,我不知道字符串可以多久。为此分配内存的合适方式是什么?如果我不知道大小,我如何将内存分配给char指针?
回答
使用realloc()增加字符串大小,当你用尽到目前为止你已经分配的内存。
每realloc的至少应该加倍您的字符串大小 - 然后花了重新分配的总时间不会渐近不同,相对于一次必要长度的字符串的一个幸运的分配。
我同意,虽然每个分配的大小加倍都没有什么魔力。只要你乘以一个大于1的常数,你停留在O(n)而不是O(n^2)。 2很受欢迎,但使用1.01可以获得相同的时间复杂度。只是一个更大的常数因素。 – 2009-09-03 22:07:59
要么你需要有传入的字符串的大小,这样就可以分配足够的内存,或者你把一些合理的限制对字符串的最大长度,说1024个字符。
或者您使用3.选项,分配合理大小的内存并重新分配(),因为您需要更多。 (修补递归函数直接返回字符串或通过传入的char **来操纵它) – nos 2009-09-03 18:25:48
如果你不能找到确切的大小(或得到它太贵了),你应该承担一定的价值。如果您可以估计字符串不会超过的最大大小,则可以分配一个该大小的缓冲区(并且在填充字符串后可能会填入realloc()
以避免浪费空间)。
如果您不能承担这样的最大值,你应该表现得像帕维尔建议 - 假设一些可能的值,然后再扩大面积为字符串出现。
在Unix(FreeBSD的),你也可以使用reallocf()。
- 1. 我怎么知道指针变量分配的内存大小c
- 2. 当我们不知道它的大小时如何为类型分配内存?
- 3. 我应该如何分配内存给许多(1000+)我不知道大小的数组?
- 4. 我如何返回我用malloc分配的指针的大小?
- 5. 将内存分配给双指针?
- 6. 分配内存到char指针
- 7. 将内存分配给C++中的char *
- 8. 将内存分配给char * C语言
- 9. 如果我使用realloc减少char **指针的大小,它是否会在内部释放减小大小的个别char *指针
- 10. 自定义分配器如何知道指针指向数组?
- 11. 释放分配给指针的内存vs释放分配给指针指向的内存
- 12. 如何从基指针中知道派生类的大小?
- 13. 为什么我不能直接在C中将指针分配给指针?
- 14. 双指针内存分配
- 15. 我是否需要为构造函数的char指针分配内存?
- 16. 如何将指针分配给栈上的指针以及堆上的指针?
- 17. 如果增加分配给指针的迭代器,指针是否会保存原始内存位置?
- 18. 分配给指针的指针:我是否应该释放它?
- 19. 将数组的内存分配给字符指针
- 20. 如何知道内存中的变量是否是指针?
- 21. 访问结构C++中的char指针并分配内存
- 22. 为函数中的char数组指针分配内存
- 23. 我将如何知道parseobject
- 24. 如何将矢量大小分配给数组大小C++?
- 25. 我如何知道我的图形窗口的大小?
- 26. 将指针分配给不同的指针(计数排序)
- 27. 我如何遍历二维数组,如果我不知道这个指标
- 28. 如何将指针指向的地址分配给另一个本地指针
- 29. 由malloc分配的指针大小
- 30. 返回指向分配给函数的内存的指针
你有更多的上下文和/或一些示例代码? – fbrereto 2009-09-03 18:21:08
如果你正在解析一个字符串,那么你*有字符串*,对吗?它会以char *的形式传入,对吧?在这种情况下,您不需要为该部分分配内存。 – Cheeso 2009-09-03 18:23:45
Tooooooooo含糊不清。 – 2009-09-03 18:24:34