求助Linux下C++程序Printf导致程序不能启动问题

forgetchou 2012-11-16 03:20:13
代码如下:
  
void LoggerProxy::SetSrcInfo(int nProductID, const char *sApp, const char *sVer, const char *sOpUser,
const char *sOpPath)
{
char sTmp[128];
memset(sTmp,0,sizeof(sTmp));
sprintf(sTmp,"<ProductID>%d</ProductID> <Name>%s</Name> <Version>%s</Version> \
<Description>%s</Description> <Status>",nProductID,sApp,sVer,sApp);
m_SrcInfoStarting=m_SrcInfoStarted=sTmp;
m_SrcInfoStarting+="0";
m_SrcInfoStarted+="1";
memset(sTmp,0,sizeof(sTmp));
sprintf(sTmp,"</Status> <OpUser>%s</OpUser> <OpPath>%s</OpPath> <RunType>*</RunType>",sOpUser,sOpPath);
m_SrcInfoStarting+=sTmp;
m_SrcInfoStarted+=sTmp;
// printf("m_SrcInfoStarting[%s]\nm_SrcInfoStarted[%s]\n",m_SrcInfoStarting.c_str(),m_SrcInfoStarted.c_str());
}
其中m_SrcInfoStarting、m_SrcInfoStarted为class LoggerProxy的成员变量、类型为string。将printf那句注释掉以后程序无法启动,调试core提示内存错误,将printf注释打开程序可以正常启动,请教大家这个问题是什么问题?谢谢
...全文
160 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
图灵狗 2012-11-16
  • 打赏
  • 举报
回复
溢出后结果不可预料,也许是刚刚好将printf注释打开后,数据覆盖的影响没有显现出来而已。
引用 6 楼 forgetchou 的回复:
的确是数组溢出了,可是为什么将printf注释打开后程序可以启动成功呢?
forgetchou 2012-11-16
  • 打赏
  • 举报
回复
的确是数组溢出了,可是为什么将printf注释打开后程序可以启动成功呢?
yanxiazhiqiu 2012-11-16
  • 打赏
  • 举报
回复
程序中尽量不要出现Magic Number
forgetchou 2012-11-16
  • 打赏
  • 举报
回复
可是为什么将printf注释打开后程序可以启动成功呢?
mymtom 2012-11-16
  • 打赏
  • 举报
回复
char sTmp[128]; 128是不是小了点,有可能越界啊 因为这个就有102位长了 "<ProductID>%d</ProductID> <Name>%s</Name> <Version>%s</Version> <Description>%s</Description> <Status>"
图灵狗 2012-11-16
  • 打赏
  • 举报
回复
一般出现这种奇怪的问题,需要检查是否有数组或者指针访问越界了,还有就是堆栈是否溢出。
dscccc 2012-11-16
  • 打赏
  • 举报
回复
http://download.csdn.net/download/zhaoyux1027/4107223

65,210

社区成员

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

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