为什么这句话会产生无意的副作用?

时间:2015-05-19 11:15:14

标签: c linux bash debugging

我使用的语句有副作用,但我不明白为什么。如果我使用这个语句,剩下的就是程序中断。

token3 = strtok(pathValue, ":");

变量token3pathvalue不会在其他任何地方使用,因此不应存在副作用。但是如果我包含它们,那么在尝试运行程序的其他部分时会出现运行时错误。我做错了什么?整个程序是一个linux程序,我自己的shell工作类似于bash,令牌化是为了查找系统上是否安装了less。

1 个答案:

答案 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函数返回指针时要小心,特别是字符串。谁拥有被指向的记忆?