strcat的内存越界陷阱

一下代码段里,char szPlanChange[500] 未初始化,会导致在strncat进行字符串连接的时候因为没有在字符数组范围内找到字符串结束符'/0'而出现内存操作越界的问题。一个实际的结果是导致delete pStartTime 的时候失败,为局部指针变量pStartTime 的地址已经被strcat非法修改,导致delete操作的是一个非法的内存地址,结果抛出异常。

 //char szPlanChange[500]={0};

 

char szPlanChange[500]; //未初始化

 char *p = szPlanChange;
 itr = m_vecStartTime.begin();
 for(int nItemID = 0; itr != m_vecStartTime.end(); itr++)
 { 
  p = szPlanChange;
  pStartTime = *itr;
  if(!pStartTime) continue;
  strncat(p,"线路:",sizeof(szPlanChange));
  strncat(p,pStartTime->szBusLineName,sizeof(szPlanChange));
  strncat(p, " ",sizeof(szPlanChange));
  
  strncat(p,"司机:",sizeof(szPlanChange));
  strncat(p,pStartTime->szDriverName,sizeof(szPlanChange));
  strncat(p, " ",sizeof(szPlanChange));

  strncat(p,"车辆:",sizeof(szPlanChange));
  strncat(p,pStartTime->szCarNo,sizeof(szPlanChange));
  strncat(p, " ",sizeof(szPlanChange));
  
  if(nItemID % 2)
   strncat(p, "事件:e1",sizeof(szPlanChange));
  else
   strncat(p, "事件:e2",sizeof(szPlanChange));
  strncat(p, " ",sizeof(szPlanChange));

  delete pStartTime;
  pStartTime = NULL;
  nItemID ++;
 }
 m_vecStartTime.clear();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值