如下代码在windows下vs2005和dev-c++都通过,但在linux下报错,错误是

lhao77 2009-04-10 12:25:41
错误如下:
*** glibc detected *** malloc():
invalid next size
*** glibc detected *** free():
我在网上搜了下,是指针问题。
代码如下:
void InitOnePch(char **ppchPre,char **ppch,char **ppchGet)
{
while(**ppch != '-' && **ppch != '!')
{
if(**ppch == '^')
**ppch = ' ';
(*ppch)++;
}
memset(*ppchGet,'\0',20);
strncpy(*ppchGet,*ppchPre,*ppch-*ppchPre);
(*ppch)++;
(*ppchPre) = (*ppch);
}

void InitStaff(Staff *pst,char *pchPre,char *pch,char *pchGet)
{
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(pst->szGivenName,pchGet);
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(pst->szSurname,pchGet);
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(pst->szRoomNum,pchGet);
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(pst->szPhoneNum,pchGet);
InitOnePch(&pchPre,&pch,&pchGet);
pst->staff_title = (Title)atoi(pchGet);
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(pst->szPosition,pchGet);
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(pst->szDepartment,pchGet);
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(pst->szUsername,pchGet);
}
void Test(char *pchSrc)
{
char *pchPre = pchSrc;
char *pch = pchSrc;
char *pchGet = new char[20];
Staff st;
while(*pch != '\0')
{
if(*pch == ',' || *pch == '!')
{
memset(pchGet,'\0',20);
strncpy(pchGet,pchPre,pch-pchPre);
pch++;
pchPre = pch;
if(!strcmp(pchGet,"a"))
{
InitStaff(&st,pchPre,pch,pchGet);
AddOneStaff(&st);
}
else if(!strcmp(pchGet,"ga"))
{
ListAll();
std::cout<<"--------"<<std::endl;
}
else if(!strcmp(pchGet,"gb"))
{
char szDepartment[20];
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(szDepartment,pchGet);
std::cout<<"Department: "<<szDepartment<<std::endl;
ListDepartment(szDepartment);
}
else if(!strcmp(pchGet,"pa"))
{
char szPhoneNum[5];
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(szPhoneNum,pchGet);
std::cout<<"Phone number: "<<szPhoneNum<<std::endl;
PrintByPhoneNum(szPhoneNum);
}
else if(!strcmp(pchGet,"pb"))
{
char szUsername[20];
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(szUsername,pchGet);
std::cout<<"Username: "<<szUsername<<std::endl;
PrintByUsername(szUsername);
}
else if(!strcmp(pchGet,"ma"))
{
char *pchPhoneNum = new char[5];
pchPhoneNum[4] = '\0';
InitStaff(&st,pchPre,pch,pchGet);
strcpy(pchPhoneNum,st.szPhoneNum);
ModifyByPhoneNum(st,pchPhoneNum);
delete [] pchPhoneNum;
}
else if(!strcmp(pchGet,"mb"))
{
char *pchUsername = new char[20];
pchUsername[19] = '\0';
InitStaff(&st,pchPre,pch,pchGet);
strcpy(pchUsername,st.szUsername);
ModifyByUsername(st,pchUsername);
delete [] pchUsername;
}
else if(!strcmp(pchGet,"da"))
{
std::cout<<"Please input PhoneNum that you want to delete"<<std::endl;
char szPhoneNum[5];
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(szPhoneNum,pchGet);
DeleteByPhoneNum(szPhoneNum);
}
else if(!strcmp(pchGet,"db"))
{
std::cout<<"Please input Username that you want to delete"<<std::endl;
char szUsername[20];
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(szUsername,pchGet);
DeleteByUsername(szUsername);
}
else if(!strcmp(pchGet,"sa"))
{
std::cout<<"Please input Surname"<<std::endl;
char szSurname[20];
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(szSurname,pchGet);
SearchBySurname(szSurname);
}
else if(!strcmp(pchGet,"sb"))
{
std::cout<<"Please input Surname (Soundex)"<<std::endl;
char szSurnameSoundex[20];
InitOnePch(&pchPre,&pch,&pchGet);
strcpy(szSurnameSoundex,pchGet);
SearchBySurnameSoundex(szSurnameSoundex);
}
else if(!strcmp(pchGet,"is"))
{
std::cout<<"Please input index"<<std::endl;
int iSelectedIndex;
InitOnePch(&pchPre,&pch,&pchGet);
iSelectedIndex = atoi(pchGet);
DisplayByIndex(iSelectedIndex);
}
else if(!strcmp(pchGet,"q"))
break;
else if(!strcmp(pchGet,"Q"))
break;
else
ShowMainMenu();
}
pch++;
}
}
...全文
105 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhao77 2009-04-10
  • 打赏
  • 举报
回复
lhao77@sohu.com
123456
邮箱里面草稿里有代码,麻烦大家帮我看看,刚搞linux不久。谢谢
lhao77 2009-04-10
  • 打赏
  • 举报
回复
lhao77@sohu.com
123456
邮箱里面草稿里有代码,麻烦大家帮我看看,刚搞linux不久。谢谢
lhao77 2009-04-10
  • 打赏
  • 举报
回复
是的,我用g++编译的。

*** glibc detected *** malloc():
invalid next size
*** glibc detected *** free():
错误如上
  • 打赏
  • 举报
回复
如果你用的纯c/c++库,应该不会有问题啊。
你linux下用g++编译的?
报的什么错误?
lhao77 2009-04-10
  • 打赏
  • 举报
回复
提供个邮件,我把代码发你
ltc_mouse 2009-04-10
  • 打赏
  • 举报
回复
是做什么操作时,提示错误呢? 错误提示在malloc/free,那就重点排查下内存使用方面的代码~~

代码并不完整,不好帮忙调试~
lhao77 2009-04-10
  • 打赏
  • 举报
回复
很奇怪我根本就没用到maloc和free啊

我是作了一个console程序,打算写个测试脚本的,Test函数读取测试字符串,进行拆分,用来测试的。
但普通用没什么问题,技术测试脚本读的时候有问题
liliangbao 2009-04-10
  • 打赏
  • 举报
回复
学习~

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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