在C中访问共享内存SIGSEGV分段错误?

时间:2014-05-05 08:40:21

标签: linux gcc

我有服务器程序,可以创建4个不同大小的共享内存段。 客户端程序附加到创建的段,但在strcmp上,共享内存变量会导致分段违规。

通过ipcs检查.. 我已经尝试了几个小时了,谷歌所有我想到的东西,但没有得到解决方案。 这是一些调试结果......

Program received signal SIGSEGV, Segmentation fault.
0x009aeb87 in __strcmp_sse4_2 () from /lib/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.25.el6.i686    libX11-1.3-2.el6.i686 libXau-1.0.5-1.el6.i686 libxcb-1.5-1.el6.i686
(gdb) bt
0  0x009aeb87 in __strcmp_sse4_2 () from /lib/libc.so.6
1  0x0809f242 in isSymb (inName=0x80aa485 "SimTime")
at /usr2/ptask5/TICSS/src/mdsm/dsm/xsymbol.c:178
(gdb) down
1  0x0809f242 in isSymb (inName=0x80aa485 "SimTime")
at /usr2/ptask5/TICSS/src/mdsm/dsm/xsymbol.c:178
if ( !strcmp( sp->symbName, inName ) )
(gdb) p inName
$1 = 0x80aa485 "SimTime"
(gdb) p sp->symbName
$2 = 0x0

sp-> symbName读取为0x0因此发生故障...在调试期间发现..但不知道如何修复...请帮助

1 个答案:

答案 0 :(得分:1)

您需要在printf设置为某个值的位置设置断点(或assertsp->symbName s)并确保它永远不会被分配{{ 1}}加上它根本就分配了一个值。