c - 在分配的字符串上使用 strtok()?

标签 c string free malloc

关于在 malloced 字符串上使用 strtok,有什么我应该知道的吗?

在我的代码中(一般而言)

char* line=getline();
Parse(dest,line);
free(line);

哪里getline()是一个将 char * 返回到某个 malloced 内存的函数。 和 Parse(dest, line)是一个做在线解析的函数,结果存储在dest中, (之前已部分填充,来自其他信息)。

Parse()电话 strtok()在线次数可变,并进行一些验证。 每个 token (指向 strtok() 返回的内容的指针)都被放入队列中,直到我知道我有多少。

然后将它们复制到 dest 中的 malloc'd char**。

现在free(line) 和一个释放 dest 中 char*[] 的每个部分的函数,它们都出现在 valgrind 上:

"Address 0x5179450 is 8 bytes inside a block of size 38 free'd"

或类似的东西。

我正在考虑重构我的代码,不直接将 token 存储在 char** 上,而是存储它们的副本(通过分配空间 == 到 strlen(token)+1,然后使用 strcpy() )。

最佳答案

有一个函数 strdup 分配内存,然后将另一个字符串复制到其中。

关于c - 在分配的字符串上使用 strtok()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1581985/

相关文章:

c - 使用 pipeline/dup2 与 Python 子进程通信

C 程序在 Debug模式下工作,在 Release模式下不工作

c - data/bss/heap 和 stack 中的内存分配

javascript - 如何获取属性值的一部分?

c - 我调用 free(),但指针仍然有数据并且其内容没有改变

c - 在 C 中重新分配指向结构的指针数组

替换多个字符的 Pythonic 方式

arrays - 为什么我的条件无法检测到空字符?

c - 免费二维字符数组

c - int 数组的动态内存分配