string内存泄露哦

在使用数据库插入语句,用string的+=拼接sql语句的时候,终于发了内存泄漏!!!!

1.发现问题。
测试软件发现内存一直在增长,把所有的new的地方都检查了一遍,一个指针都没放过,最最最后在string的+=这一块代码发现了问题。

_str += (" values (" + to_string(t->ts) + "," + to_string(t->data_value.value_float)
 1. "," + to_string(t->data_value.value_float) +"," + to_string(t->data_status)+ 
 2. "," + to_string(++i)  + ") ");
  1. 自我怀疑。
    起初是以为string需要自己释放,其实我也不敢相信,我产生了程序员的自我怀疑;我去每个string使用完后clear,但是调试的时候发现,clear之后任然会出现内存泄露。

  2. 抓狂。
    开始考虑string本身的结构有问题,虽然clear了但是内存可能还没被释放,使用网上说所shrink_to_fit()的string自带函数对clear的地方,再进行一次shrink_to_fit();任然没有解决问题。

  3. 求助高手。
    我把上面相关代码段落注释掉,内存不泄露,开放泄露,这一现象给了旁边的高手看;高手一边调试一边说,存放sql语句的结构体的queue有没有释放?
    好吧,又开始倒腾,希望能有结果,结果依然存在内存泄漏。

  4. 开始发呆,思考人生。
    对着代码发呆,思考人生。根本想不明白为什么。

  5. 开始摆烂。
    开始研究其他项目。最后一位扫地僧说了一句要不考虑用一下append?

  6. 尝试append。
    修改+=为append;

			_str.append("(values (");
			_str.append(to_string(t->ts));
			_str.append(",");
			_str.append(to_string(t->data_value.value_float));
			_str.append(",");
			_str.append(to_string(t->data_value.value_float));
			_str.append(",");
			_str.append(to_string(t->data_status));
			_str.append(") ");

居然内存泄露解决了。开始查找资料关于string的+=使用发现:string使用+=的时候由于前面的对象长度不够,可能需要再栈上申请新的空间加上后的字符串,但是之前的对象没有被释放,久而久之,如果像我一样用+=来拼接成千上万的sql语句,内存泄漏导致的问题就非常明显。

  1. 总结以后再也不用+=,用append了,不,再也不用string了,等我什么时候后悔了再用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值