论坛风格切换切换到宽版
  • 710阅读
  • 5回复

[问题求助][RedHat] 内存报错 [复制链接]

上一主题 下一主题
离线43627962.
 
发帖
2025
C币
-139515
威望
367
贡献值
1
银元
-1
铜钱
4490
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
#include <sys/types.h.>投资
#include <.sys/ipc.h>[成人用品]
#incl.ude <sys/msg.h>(        游戏          )
#include <stdio..h>.

int     main()
{      
        int    . msqid;(广告)
       . key_t   msgkey;          婚庆
        struct  msgbuf.(        游戏          )
        {
           . .    long    mtype;域名
. .              char    mdata[256];             电子
        };
        st.ruct  msgbu.f  msgdata , *p ;.
        p = &msgda.ta ;外贸
        msgkey = ftok( "mrecv" , 'a' );  .       /*      计.算标识符      */电影
        msqid = msgget( msg.key , IPC_CREAT | 0666 ) ;  . /*      取得消息队列的ID  .      */    美容
    .    while(1)健康
        {
.               msgrcv( msqid , p , sizeof(p->mdata) , 0 , 0 ) ;   .     /*   .   读消息  */教育
                pr.intf("Message received from .%ld\n%s\n" , p->mty.pe , p->mdata );<性病>
        }
        retur.n 0;学习

[root@localhost6 msq]# cc -o msend ..msend.c          婚庆
/tmp/c.cmV9Vam.o: In function `main.':.
msend.c.text+0x3f): warning: the `gets' function is dangerous and should not be used.http://upload.bbs.csuboy.com/Mon_1004/126_6780_893987e7a18c182.gif[/img](广告)
[root@loc.a.lhost6 msq]# ./msend              乙肝
Segmentat.ion fault             电子

请问是什么原因?

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
发帖
1844
C币
-236143
威望
320
贡献值
1
银元
-2
铜钱
4095
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
Re:[RedHat]
struct  msgbuf  msgdata , *p ;

没分配内存

离线zxlovest.
发帖
2235
C币
-60023
威望
421
贡献值
1
银元
-1
铜钱
5033
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
Re:[RedHat]
# cat a.c

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/msg.h>

#include <stdio.h>



int main(void)

{

        int     msqid;

        key_t   msgkey;

        struct  msgbuf

        {

                long    mtype;

                char    mdata[256];

        };

        struct  msgbuf  msgdata , *p ;

        p = &msgdata ;

        msgkey = ftok( "mrecv" , 'a' );         /*      计算标识符      */

        msqid = msgget( msgkey , IPC_CREAT | 0666 ) ;   /*      取得消息队列的ID        */

        while(1)

        {

                msgrcv( msqid , p , sizeof(p->mdata) , 0 , 0 ) ;        /*      读消息  */

                printf("Message received from %ld\n%s\n" , p->mtype , p->mdata );

        }

        return 0;

}

root@LinuxDev /tmp

# gcc -O2 -Wall -o a a.c

root@LinuxDev /tmp

# ./a



root@LinuxDev /tmp

#
复制代码
我的没问题

离线5842136.
发帖
2262
C币
-192932
威望
414
贡献值
1
银元
-2
铜钱
5064
人人网人气币
0
只看该作者 地板  发表于: 2010-04-13
Re:[RedHat]
呵呵,发错了。上面的是接受消息的服务

/*      msend.c */
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>

int     main()
{
        int     msqid;
        key_t   msgkey;
        struct  msgbuf
        {
                long    mtype;
                char    mdata[256];
        };
        struct  msgbuf  msgdata , *p ;
        
        p = &msgdata ;
        printf("Enter message : ");
        fflush( stdin );        /*      刷新标准输入缓冲区      */

        gets( p->mdata );       /*      输入字符串      */
        p->mtype = getpid();
        msgkey = ftok ( "mrecv" , 'a' );        /*      计算标识符      */
        msqid = msgget( msgkey , IPC_CREAT | 0666 ) ;   /*      建立消息队列    */
        msgsnd( msqid , p , sizeof(p->mdata) , 0 );     /*      送消息  */
        return 0;
}

离线沸冰.
发帖
2034
C币
-235630
威望
364
贡献值
1
银元
-3
铜钱
4553
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-13
Re:[RedHat]
还是没错误

离线wuyangbo11.
发帖
2038
C币
-235209
威望
394
贡献值
1
银元
-3
铜钱
4624
人人网人气币
0
只看该作者 5楼 发表于: 2010-04-13
Re:[RedHat]
问题可能出在 gets 上,我编译也无法通过,但是下面修改后的代码可以正常运行
# cat c.c

#include <stdio.h>

#include <string.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/msg.h>



int     main()

{

        int     msqid;

        key_t   msgkey;

        struct  msgbuf

        {

                long    mtype;

                char    mdata[256];

        };

        struct  msgbuf  msgdata={0} , *p ;



        p = &msgdata ;

        memcpy(p->mdata, "test", 4);

        p->mtype = getpid();

        msgkey = ftok ( "mrecv" , 'a' );        /*      计算标识符      */

        msqid = msgget( msgkey , IPC_CREAT | 0666 ) ;   /*      建立消息队列    */

        msgsnd( msqid , p , sizeof(p->mdata) , 0 );     /*      送消息  */

        return 0;

}

root@LinuxDev /tmp

# ./c

Message received from 4760

test

root@LinuxDev /tmp

#
复制代码
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个