我有某種遞歸函數,但我需要解析一個字符串,我不知道字符串可以多久。爲此分配內存的合適方式是什麼?如果我不知道大小,我如何將內存分配給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