Kun*_*oor -5 c pointers segmentation-fault
我有以下代码:
void func(uint8 *var) {
uint8 tempvar;
if (var)
var = &tempvar;
*var = 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用以下方法调用函数:
func(NULL);
Run Code Online (Sandbox Code Playgroud)
代码在"*var = 0;"行给出了分段错误 因为var仍然指向内存地址0x0.我不明白为什么我对临时变量的赋值不起作用!
因为你省略了!.您正在测试变量是否存在,但您应该测试它是否不存在:if (!var) ...
为了进一步扩展...... var是类型uint8 *,因此var本身就是一个指针.通过编写,if (var)您正在测试该指针是否为NULL.在伪代码中,您的代码说:
if (the var pointer already exists)
assign a new pointer to it (make it point to somewhere else)
Run Code Online (Sandbox Code Playgroud)
但如果它不存在(如果它指向NULL),你就不管它了.您可以使用调试器或简单的print语句对此进行验证.因此,您最终会使用空指针进行赋值,并使程序崩溃.