【发布时间】:2016-04-06 00:40:26
【问题描述】:
我首先使用 std c99 在 32 位 linux 系统上运行。所以我有这个代码
char* tokPtr = strtok(expr, " ");
while(tokPtr != NULL) {
tokPtr = strtok(NULL, " ");
puts(tokPtr);
push(tokens, tokPtr);
}
expr 是作为参数传入的 C 字符串,类似于“1 2 +”。而且我只是将 puts 用于测试目的。但是,当我运行带有 --leak-check=full 标志的 valgrind 时,我在 put 中读取 strlen 的大小为 1 并以 seg 错误结束。当我让 tokPtr = "1";并注释掉 strtok() 的东西,我运行 valgrind 并且完全没有错误。我不知道为什么会这样,我真的可以使用一些帮助。谢谢。
【问题讨论】:
-
我最后的办法是循环 strtok() 并在第一部分被切断的情况下重置字符串。