我有一个像这样的C程序
$scope.addList = function(task,subtask){
subtask.checked= !(subtask.checked);
var data = {
"task_id": task._id, // Updated key name based on your required output
"subTaskName": subtask.subTaskName,
};
if(subtask.checked){
selectedMap.push(data); // Add data object in array instead of key value pair
} else {
selectedMap = selectedMap.filter(function(obj) {
return (obj.task_id !== data.task_id && obj.subTaskName !== data.subTaskName);
});
}
此程序返回的输出是
#include <stdio.h>
void print_int()
{
int i;
i++;
printf("%d\n",i);
}
int main()
{
print_int();
print_int();
return 0;
}
我对此输出有疑问。难道这不是两个垃圾值,因为变量i没有被初始化吗?
答案 0 :(得分:2)
您正在获得未定义的行为。
变量i
可能在每次调用时都位于相同的物理内存位置,它恰好在启动时被清除,并且没有任何东西在那里写垃圾,因此您可以看到这些特定的值。如果您在两次print_int()
调用之间调用其他函数,结果可能会有所不同。
那只是&#34;运气&#34;当然,这个程序已经破了。
答案 1 :(得分:1)
未初始化的本地非静态变量的值是不确定,使用它时它仍然未初始化导致未定义的行为。有时它似乎可以工作,但实际上并非如此。
但是你的案子很容易解释。局部变量i
必须占用一些内存位置。恰好在首次调用函数时,内存位置包含0
。下次调用该函数时,它将位于同一位置。不应该依赖此行为,未定义的行为仍然是未定义的行为。