用消息队列传递数据出现stack smashing detected的问题

2025-02-28 13:56:06
推荐回答(4个)
回答1:

msgrcv(msgid,&msg,sizeof(msg),0,0);

问题出在这一句,你给的长度是整个结构体的长度,也就是会读260个字符到&msg中
但是按照UC消息队列的机制,这260个字符时不计算mtype在内的,也就是你这260个字符都会被写在buf[]中,会导致栈溢出

同理
msgsnd(msgid,&msg1,sizeof(msg1),0);
也存在问题,只是对溢出的四个字节是读 应该没有问题
msgrcv就不同了

回答2:

应该是字符串没有结束符'\0'
结构体要初始化 MSG msg = {0};

回答3:

dsaaas

回答4:

按你的程序进行了测试,没有发现问题啊,不知道你的linux 和gcc版本是什么?