2009-09-03 101 views
0

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

+2

你有更多的上下文和/或一些示例代碼? – fbrereto 2009-09-03 18:21:08

+2

如果你正在解析一個字符串,那麼你*有字符串*,對嗎?它會以char *的形式傳入,對吧?在這種情況下,您不需要爲該部分分配內存。 – Cheeso 2009-09-03 18:23:45

+3

Tooooooooo含糊不清。 – 2009-09-03 18:24:34

回答

6

使用realloc()增加字符串大小,當你用盡到目前爲止你已經分配的內存。

每realloc的至少應該加倍您的字符串大小 - 然後花了重新分配的總時間不會漸近不同,相對於一次必要長度的字符串的一個幸運的分配。

+1

我同意,雖然每個分配的大小加倍都沒有什麼魔力。只要你乘以一個大於1的常數,你停留在O(n)而不是O(n^2)。 2很受歡迎,但使用1.01可以獲得相同的時間複雜度。只是一個更大的常數因素。 – 2009-09-03 22:07:59

1

要麼你需要有傳入的字符串的大小,這樣就可以分配足夠的內存,或者你把一些合理的限制對字符串的最大長度,說1024個字符。

+1

或者您使用3.選項,分配合理大小的內存並重新分配(),因爲您需要更多。 (修補遞歸函數直接返回字符串或通過傳入的char **來操縱它) – nos 2009-09-03 18:25:48

0

如果你不能找到確切的大小(或得到它太貴了),你應該承擔一定的價值。如果您可以估計字符串不會超過的最大大小,則可以分配一個該大小的緩衝區(並且在填充字符串後可能會填入realloc()以避免浪費空間)。

如果您不能承擔這樣的最大值,你應該表現得像帕維爾建議 - 假設一些可能的值,然後再擴大面積爲字符串出現。

0

在Unix(FreeBSD的),你也可以使用reallocf()。

相關問題