当前位置: 技术问答>linux和unix
linux下C++动态malloc申请内存出现问题,高人指点一下,在线
来源: 互联网 发布时间:2016-07-11
本文导语: 本帖最后由 Hntxh 于 2009-10-27 18:33:31 编辑 char *recvData; while(1){ sendSize=recv(newClient,recvBuff,BUFFSIZE,0); if(sendSize>0){ recvData=(char*)malloc(sizeof(char)*sendSize+1); if(recvData==NULL){ printf("malloc error!!"); break; } else{ memcpy(recv...
while(1){
sendSize=recv(newClient,recvBuff,BUFFSIZE,0);
if(sendSize>0){
recvData=(char*)malloc(sizeof(char)*sendSize+1);
if(recvData==NULL){
printf("malloc error!!");
break;
}
else{
memcpy(recvData,recvBuff,sendSize);
}
recvData[sendSize+1]='';
printf("recvSize:%d,t %stn",sendSize,recvData);
free(recvData);
}
}
自己用C++还不是很熟悉,这个是我在linux下写的一个Socket通信接收的部分代码,里面有用到malloc申请内存,以前有点惧怕这个东西,一直很少用,现在用还是问题很多
这段代码是在一个线程里面运行,一开始运行没有问题,但是时间一长,程序就崩溃了,想不透什么原因,希望各位高人多多指教,先谢过了
|
recvData[sendSize+1]='' 有点问题 你申请了sendSize+1个空间 ,那么数组得最后一个应该是recvData[sendSize] 不能对recvData[sendSize+1]= 赋值
|
打命令 ulimit -c unlimited
程序死掉了再打
gdb 程序名 --core=core文件名
程序死掉了再打
gdb 程序名 --core=core文件名
|
我说得问题不一定和你这个程序有关,多线程优势是数据共享 麻烦就麻烦在数据共享,我看错了我开始以为recvData是全局指针,一个线程为它malloc空间,另外一个线程把它free掉了,等到而原线程free得时候就dump core了
|
int recv_result(SOCKET s, char *buf, int len, int flags )
{
int i = 0;
int n = len;
while(n > 0)
{
i = recv(s, buf + i, n, flag);
if(i