我使用的语句有副作用,但我不明白为什么。如果我使用这个语句,剩下的就是程序中断。
token3 = strtok(pathValue, ":");
变量token3
和pathvalue
不会在其他任何地方使用,因此不应存在副作用。但是如果我包含它们,那么在尝试运行程序的其他部分时会出现运行时错误。我做错了什么?整个程序是一个linux程序,我自己的shell工作类似于bash,令牌化是为了查找系统上是否安装了less。
答案 0 :(得分:5)
getenv()
getenv()
的这一页面富含线索:
getenv()
的返回值指向的字符串可能是静态分配的,可以通过后续调用putenv(3)
,setenv(3)
,unsetenv(3)
或strtok()
。
因此,for (var i = 0; i < 10000; i++) {
(function(start) {
Models.User.findOneAsync({
userId: 'ABCD'
}, 'age name location')
.then(function(user) {
logger.debug(Date.now() - start);
})
})(Date.now());
}
可以做到这一点并不是一个好主意。尝试先复制字符串。
教训是:总是在C函数返回指针时要小心,特别是字符串。谁拥有被指向的记忆?