在进入main()之前我遇到了分段错误

时间:2011-11-10 10:18:28

标签: c++ linux sockets

有人知道我的代码有什么问题吗?

这些是我收录的图书馆:

#include <pthread.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <iostream>
#include <stdio.h>

using namespace std;

int sockfd;

这是我send命令的主题:

void *mySend(void* a)
{ 
    cout<<"me too"<<endl;
        //this cout is not printed.

    char message[100];

    while (1)
    { 
         cin>>message;
    send(sockfd, message, strlen(message)+1, 0);
    }
    return NULL;    

 }

我的主要功能是将此代码连接到服务器,并使用recv命令从服务器接收。

 int main(int argc, char *argv[])
 {
     cout << "hello" << endl;
     //this cout is not printed
 int port;

     cout << "hello" << endl;

     sscanf(argv[3],"%d", & port);

 cout << "hello" << endl;

 struct sockaddr_in dest_addr;
     sockfd = socket(AF_INET,SOCK_STREAM,0);
     dest_addr.sin_family = AF_INET;
     dest_addr.sin_port = htons(port);
     dest_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
     memset(&(dest_addr.sin_zero),'\0',8);

     int c = connect (sockfd,(struct sockaddr *)&dest_addr,sizeof(structsockaddr));
     if (c!=-1)
         cout <<"CONNECTED SUCCESSFULLY!"<<endl;

 char buffer [20];
 pthread_t mammad;
 pthread_create (&mammad, NULL,mySend,0);   

对于recv命令。

     while(1)
 {
     recv (sockfd , buffer , strlen(buffer)+1 , 0 );
     cout <<"server said :" <<buffer<<endl;
 } 
 close (sockfd);
 return 0;

 }

在打印任何内容之前,我遇到了分段错误。 我只是想不起来。 帮助!

2 个答案:

答案 0 :(得分:3)

如果程序在进入main之前崩溃,则必须是一些崩溃的初始化内容。您应该看看您的全局对象及其构造函数。这样做时请记住,如果全局对象1依赖于已构建的全局对象2,则可能会出现问题。

答案 1 :(得分:3)

您以何种方式提供意见。

如果是

$。/ a.out PORT_NO

然后你会得到segentation.Because因为你使用 argv [3]

如果您为 argv [1] 执行此操作,它肯定会运行

我已经测试过了。

输出如下....

[sharma@localhost ~]$ ./a.out 5000
hello
hello
5000
hello
CONNECTED SUCCESSFULLY!
me too
server said :W
server said :el
server said :com
server said :e to�H*����
server said : TCPServer����
me too
me too
me too
me too
me too
It's a test
server said :No one on that ro
me too
server said :le.No one on that 
server said :role. one on that 
me too
me too

哦......发送和接收都被破坏了。因为我在循环中使用了你的pthread。