在我的一个Contiki应用程序中,我从PROCESS(P)调用某个函数(f)。当(f)中存在至少一个'printf'时,(P)中的'printf'正确显示结果。但是,当同一循环中没有'printf'时,结果为空。 任何人都可以帮助我理解为什么延迟使用printf调用循环显示结果以及为什么没有这个特定的调用它不会显示。
**CODE:**
function_f(...){
....
....
char res1[LEN];
....
for(i=LEN-1;i>1;i--){
....addition operations...
if(temp > 9 && (i-1) > 0){
...division operation...
...addition and remainder operation...
}else{
....addition....
....assignment....
}
}
return res1
}
PROCESS_THREAD(...){
....
**printf**("\nResult: %s", function_f(...));
....
}
谢谢你, Avijit
答案 0 :(得分:2)
关于这一行:return res1 res1将是一个指向堆栈中数组的指针。当函数退出时,堆栈上的值超出范围'如果指针res1被取消引用,则导致未定义的行为。一个可能的解决方案:
char * res1 = NULL;
res1 = malloc(LEN);
if(NULL == res1)
{ // handle error }
else ....
当然,调用者需要将res1传递给free()
由于发布的代码(可能是您的实际代码)显示未定义的行为,因此任何重新安排的代码都会/将导致不同的效果。在您的情况下,添加/删除对printf()的调用将显示观察到的效果。