我有服务器程序,可以创建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因此发生故障...在调试期间发现..但不知道如何修复...请帮助
答案 0 :(得分:1)
您需要在printf
设置为某个值的位置设置断点(或assert
或sp->symbName
s)并确保它永远不会被分配{{ 1}}加上它根本就分配了一个值。