在malloced字符串上使用strtok有什麼我應該知道的嗎?在分配的字符串上使用strtok()?
在我的代碼我有(籠統)
char* line=getline();
Parse(dest,line);
free(line);
其中getline()
是返回一個char *一些malloc內存的功能。 和Parse(dest, line)
是一個在線解析,將結果存儲在dest
(已從其他信息中部分填充)的函數。
Parse()
在線調用strtok()
可變的次數,並做一些驗證。 每個標記(一個指向strtok()
返回的指針)被放入一個隊列中,直到我知道我有多少。
然後將它們複製到dest中的malloc'd char **上。
現在free(line)
和一個函數,它自由的炭的每個部分* []在dest,既想出上的valgrind爲:
「地址0x5179450是8個字節大小的塊內38自由」 d「
或類似的東西。
我正在考慮重構我的代碼,不直接在char **上存儲標記,而是存儲它們的副本(通過mallocing space == strlen(令牌)+1,然後使用strcpy()
)。
我相信這:http://stackoverflow.com/questions/1495368/strtok-and-memory-leaks,去回答我的問題一些whay。 – 2009-10-17 11:20:48
strtok在本地修改字符串,在刪除符號的位置添加空值。並返回指向這些部分開始的指針 – 2009-10-17 11:31:56