在进入 main() 之前出现分段错误 [关闭]
Posted
技术标签:
【中文标题】在进入 main() 之前出现分段错误 [关闭]【英文标题】:I get a segmentation fault before entering main() [closed] 【发布时间】:2011-11-10 10:18:27 【问题描述】:有人知道我的代码有什么问题吗?
这些是我包含的库:
#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;
我的 main 函数将此代码连接到服务器,并具有用于从服务器接收的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;
在打印任何内容之前出现分段错误。 我就是想不通。 帮忙!
【问题讨论】:
您是否尝试过使用调试器来获取崩溃时的回溯和位置? 我强烈建议在访问argv
之前检查argc
。例如,在你的情况下if (argc < 4) cout << "not enough args"; return -1; sscanf(argv[3],"%d", & port);
你有静态或全局声明吗?
遵循通常的调试策略:删除东西直到问题消失。您删除的最后一件事一定是问题的一部分。在寻求帮助时发布最少可编译代码。
【参考方案1】:
您以何种方式提供意见。
如果是这样的
$./a.out PORT_NO
那么你肯定会得到隔离。因为你使用的是 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
哦...发送和接收已损坏。因为我在 recv while 循环中使用了您的 pthread。
【讨论】:
【参考方案2】:如果程序在输入main
之前崩溃了,那一定是一些初始化的东西崩溃了。你应该看看你的全局对象和它们的构造函数。这样做时请记住,如果全局对象 1 依赖于已构建的全局对象 2,您可能会遇到问题。
【讨论】:
臭名昭著的Static Initialization Fiasco
。以上是关于在进入 main() 之前出现分段错误 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 C++ 标准向量在分配或调整大小时会出现段错误? [关闭]