C++ 中 只要一用 std 就 Segmentation fault: 11 该如何解决呢?

kither 2017-01-13 01:21:53
添加 cin >> a; 按下回车就 报 Segmentation fault: 11
不知道怎么处理

client代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include "define.h"
#define DEFAULT_PORT 6666
int main(){
int connfd = 0;
string T;
struct sockaddr_in client;
T = "127.0.0.1";
const char *hname = T.c_str();
client.sin_family = AF_INET;
client.sin_port = htons(DEFAULT_PORT);
client.sin_addr.s_addr = inet_addr(hname);
connfd = socket(AF_INET, SOCK_STREAM, 0);
if(connfd < 0){
printf("socket() failure!\n" );
return -1;
}
if(connect(connfd, (struct sockaddr*)&client, sizeof(client)) < 0){
printf("connect() failure!\n" );
return -1;
}
Pkg mypkg;
mypkg.head.num=1;
string a;
cin >> a;
cout << a << endl;
mypkg.head.index=10001;
mypkg.content.sex='m';
mypkg.content.score=90;
mypkg.content.age=18;
T = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
const char * temp= T.c_str();
strncpy(mypkg.content.address,temp,sizeof(mypkg.content.address));

ssize_t writeLen;
int tLen=sizeof(mypkg);
printf("tLen:%d\n" ,tLen);
int iLen=0;
char * pBuff= new char [1000];
*(int*)(pBuff+iLen)= htonl(tLen);
iLen+=sizeof( int);
*(int*)(pBuff+iLen)= htonl(mypkg.head.num);
iLen+=sizeof( int);
*(int*)(pBuff+iLen)= htonl(mypkg.head.index);
iLen+=sizeof( int);
memcpy(pBuff+iLen,&mypkg.content.sex,sizeof( char));
iLen+=sizeof( char);
*(int*)(pBuff+iLen)= htonl(mypkg.content.score);
iLen+=sizeof( int);
memcpy(pBuff+iLen,mypkg.content.address,sizeof(mypkg.content.address));
iLen+=(sizeof(mypkg.content.address));
*(int*)(pBuff+iLen)= htonl(mypkg.content.age);
iLen+=sizeof( int);
writeLen= MySend(connfd, pBuff, iLen);
if (writeLen < 0) {
printf("write failed\n" );
close(connfd);
return 0;
}
else{
printf("write sucess, writelen :%ld, iLen:%d, pBuff: %s\n",writeLen,iLen,pBuff);
}
close(connfd);
return 0;
}


define.h代码:

#pragma pack(1)
#include <iostream>
using namespace std;
struct Header {
int num ;// 包id
int index ;// 学生编号
};
struct PkgContent {
char sex ;// 性别
int score ;// 分数
char address [100];// 地址
int age;
};
struct Pkg {
Header head;
PkgContent content ;
};

int MySend( int iSock, char * pchBuf, size_t tLen){
int iThisSend;
unsigned int iSended=0;
if(tLen == 0)
return 0;
while(iSended<tLen){
do{
iThisSend = send(iSock, pchBuf, tLen-iSended, 0);
} while((iThisSend<0) && (errno==EINTR));
if(iThisSend < 0){
return(iSended);
}
iSended += iThisSend;
pchBuf += iThisSend;
}
return tLen;
}



makefile 文件:

all:client
client:client.o
g++ -g -o client client.o
client.o:client.cpp define.h
g++ -g -c client.cpp
clean:all
rm all
...全文
165 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧