c语言分段错误空指针,C语言空指针总结 - 祂的小哥哥的个人空间 - OSCHINA - 中文开源技术交流社区...

空指针就是指向不可访问区域的的指针,它的值为NULL,地址一般是内存的首地址。详情见代码1、2及其运行结果。

NULL是标准库定义的等于0的常量符号。

不可访问和内存的划分有关。系统会在每个程序被调用的时候为它分配一个内存段,这个内存段是物理地址经过偏移计算得来的,用来映射程序的所有内容。其中,空指针指向的内存地址和实际的物理地址不存在映射,也就是通过空指针所指向的地址找不到对应的物理地址。

空指针的应用。指针在被创建时会随机指向一个内存地址,如果不加限制可能造成非法访问、写越界(写越界的危害自己想象)。所以指针被创建的时候通常会指向一个有意义的内存。如果暂时没有用到,则赋值为NULL,表示处于闲置状态,不指向任何有意义的对象。同时指针指向的内存被释放的时候也需要讲指针置空,否则指针将对一个已经释放的内存继续保有访问的权限,同样具有安全问题。

空指针的危害。空指针指向不可访问的区域,如果程序使用空指针进行访问,将会导致程序出错、中断。详情见代码3及其运行结果。在使用一个指针变量的时候对其进行非空判断可以避免这种情况。这也是通常的做法。

代码1及其运行结果

#include

#include

int main()

{

//char * str = (char*)malloc(sizeof(char)*5);

char * str = NULL;

printf("str1 is %s\n", str);

printf("str2 is %x\n", &str);

getchar();

return 0;

}

2fec107d73952c92ac5c9c17a36c96ea.png

代码2及其运行结果

d2f981d75b367def883fb83c752d6210.png

代码3机器运行结果

#include

typedef struct

{

int a_;

int b_;

}test_;

void test(test_* str)

{

int a = str->a_;

int b = str->b_;

printf("a is %d, b is %d\n");

}

int main()

{

test(NULL);

getchar();

return 0;

}

2bde0b6cc7cf2095aa4ab080b445e53a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值