C语言野指针问题


第一点
消息队列就可以用做进程之间的通信也可以用作进程里面的线程之前的通信。他们在用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.csdn.net/liuchunjie11/article/details/80969689

你可能感兴趣的:(Linux内存管理)