如何利用core文件定位bug.

       在Linux平台下面做C++开发的时候,需要特别的注意内存越界的问题,常见的内存越界现象主要有以下两种:1.在同一个函数内,分配变量内存的长度和填充变量的内存长度不一致。2. 在同一个模块内,不同的函数之间,内存分配和内存填充不一致。 任何形式的内存越界都可以导致系统挂死,通常我们可以借助系统产生的core文件帮助我们定位bug.

      对于第一种情况,core文件会提示出非常准确的错误信息,但是对于第二种情况,core文件就不一定会给出准确的提示。例如,在函数A中,我分配了一条查询记录的空间,然后初始化了这个地址空间,在函数A中调用函数B,函数B中绑定了50条的查询记录,然后返回50条查询结果给A,这个时候系统一定会挂掉,而core文件绝不会提示你内存越界,它会提示你,归还数据库链接失败。

      这是不是很令人郁闷,”归还“数据库链接也会失败?

      对第一种情形,经常是由于忽略所分配变量的类型长度而导致的。

      例如:

      wchar * pBuffer = NULL;

      vos_new(pBuffer,  (wchar)pBufferLength);

      我们该如何初始化pBuffer呢?

      菜鸟们往往会写为 meset(pBuffer,0,pBufferLength);

      后果是,执行该段程序的时候系统会挂死。

       正确的应该写为meset(pBuffer,0,pBufferLength*sizeof(wchar ));

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值