gpt4 book ai didi

c - 正在做 (ptr && *ptr) 检查是否有任何值分配给 ptr 的好方法?我的一直崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 05:23:47 26 4
gpt4 key购买 nike

我不太确定 ptr&&(*ptr) 的使用
起初,我不确定这是为了检查 NULL ptr 还是赋值是否存在。
但是现在运行下面的代码后我发现这两种方式都不起作用:发生运行时错误!

有人能解释一下里面发生了什么讨厌的事情吗?
海湾合作委员会 5.3.0

#include <stdio.h>
int main(void){
int* ptr=NULL;
// ptr=NULL;
int res = (ptr && *ptr);

//assigning NULL to *ptr or ptr address results in runtime error. What's happening?
//compiled with gcc.exe (GCC) 5.3.0 on windows

printf("address: %d \n val: %d \n",ptr,*ptr);
printf("isNullptr? ptr&& *ptr %d",res);
return;
}

最佳答案

下一行完全没问题,因为如果 ptr 等于 NULL,短路会阻止它被取消引用。

int res = (ptr && *ptr);

但是下面的代码无条件地取消引用它,导致崩溃。

int* ptr=NULL;
// ...
printf("address: %p \n val: %d \n",(void *)ptr,*ptr);
// ^~~~

此外,请注意打印指针的正确方法是使用 %p 而不是 %d,并且指针必须转换为 无效 *。我相应地更改了您的 printf()

关于c - 正在做 (ptr && *ptr) 检查是否有任何值分配给 ptr 的好方法?我的一直崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43155402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com