C语言野指针问题

本文深入探讨了消息队列在进程间及线程间通信的应用,并详细解析了野指针的概念及其可能导致的段错误,强调了指针初始化的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


第一点
消息队列就可以用做进程之间的通信也可以用作进程里面的线程之前的通信。他们在用msg get创建的时候通过参数来决定否这个消息对列是用于进程之间,还是用于线程之间。进程里面的消息对列通过IPC_PRIVATE这个参数来创建进程的私有消息对列。


第二点

野指针不要进行直接赋值操作,野指针是没有分配实体内存的,是系统任意给它指向一片空闲内存,但这个内存没有被保护,在真正给野指针赋值前,这片内存有可能被系统分配给其它进程(此时这片内存会被系统保护,只允许此进程使用),此时再给野指针赋值就会产生段错误。所以,定义指针时,就要让它指向真实分配的内存,比如,

int a; 
char buf[20] = {0};
int *p = a; //分配了实体内存
int *m = 4; //分配了实体内存
char *n = buf; //分配了实体内存

char *q; //野指针,没有分配真实内存,默认指向一片空闲内存

...... //q指向的内存区域有可能被系统分配给其它进程

*q = 2; //可能引起段错误,因为q指向的内存区域被系统保护了

此时的p、m、n就不是野指针,它有指向真实分配得内存。后续可以对p进行赋值操作。

可以阅读这篇文章:

https://blog.youkuaiyun.com/liuchunjie11/article/details/80969689

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值