Linux系统编程---共享内存中出现段错误
简述
关于共享内存中,另一个程序访问时出现段错误的问题,后来在一篇博文中找到了问题出错我原因
共享内存常见段错误
1、共享内存相关使用
2、 使用上错误示例
从上文的链接上,可以大概的了解到共享内存的使用,这里就只拿出使用的共享内存的结构体。
struct date{
int flag;
char *buf;
};
//flag表示是否写入内容,buf指针则指向一块内存。
在使用这个结构体时,写入端按正常情况将对应内容写入,写入结果都是正确的,没有任何报错信息。但是读取端在读取信息时,发现读取buf时出现段错误。
3、正确示例
struct date{
int flag;
char buf[4];
};
出现错误时,对结构体进行修改,不再使用指针来作为共享内存的结构体,而是使用一个静态数组。
4、思考
我在使用时,有出现指针滥用,没有对共享内存的指针进行初始化,而直接对指针指向一个字符串指向,导致另一个程序访问时,出现段错误。
我认为出现的问题出在,结构体中使用了一个指针,我直接在代码中,给指针赋了一个字符串,这样做导致指针在写入程序中得到的地址是一个随机地址,当读入端再去读这个指针中的内容时,因为是另一个进程再去读取,导致地址读取错误。
我总结在共享内存中不要对指针进行随意使用,至少对指针进行初始化操作。关于更深层的原因,后面需要我再去了解,这里更多我认为是因为指针的失控。