在使用 Connect/C++ ,测试时发现在调用 getString 出现了内存增长的情况。

  1.     ConstructOutput(); //打印出当前内存
  2. for(int i=;i<;++i)
  3. {
  4. prepareState.reset(con->prepareStatement("call test.testproc3(?)"));
  5. prepareState->setInt(,);
  6. prepareState->executeUpdate();
  7.  
  8. result.reset(prepareState->getResultSet());
  9. // 输出结果
  10. while(result->next())
  11. {
  12. int id = result->getInt("id");
  13. string name = result->getString("name");  //这里注释掉就不增长了  
  14. }
  15. while (prepareState->getMoreResults())
  16. result.reset(prepareState->getResultSet());
  17. }
  18. ConstructOutput();

  ConstructOutput(); 函数 是打印当前内存的,实现见下面的头文件:

  1. #pragma once
  2.  
  3. #define CRTDBG_MAP_ALLOC
  4. #include <windows.h>
  5. #include <tchar.h>
  6. #include <crtdbg.h>
  7. #include <stdlib.h>
  8. #include <iostream>
  9. #include <Psapi.h>
  10. #pragma comment(lib,"psapi.lib")
  11.  
  12. #ifdef _DEBUG
  13. #define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
  14. #define calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__)
  15. #define realloc(p, s) _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__)
  16.  
  17. #define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
  18. #endif
  19.  
  20. #define DEFAULT_OUT_TITLE \
  21. TEXT("缺页中断数 工作集(KB) 虚存(KB) 虚存峰值(KB)")
  22. #define DEFAULT_OUTPUT_FORMAT \
  23. TEXT(" %u %u %u %u ")
  24.  
  25. // 字节单位转换,向0取整
  26. #define B2KB(x) ((x) >> 10)
  27.  
  28. ///////////////////////////////////////////////////////////////////////////////////
  29.  
  30. void ConstructOutput()
  31. {
  32. PROCESS_MEMORY_COUNTERS pmc;
  33. std::cout<<DEFAULT_OUT_TITLE<<std::endl;
  34. if(!GetProcessMemoryInfo(GetCurrentProcess(),&pmc,sizeof(pmc)))return ;
  35.  
  36. char output[] = {};
  37. _sntprintf(output,sizeof(output),DEFAULT_OUTPUT_FORMAT,
  38. (pmc.PageFaultCount),B2KB(pmc.WorkingSetSize),B2KB(pmc.PagefileUsage),B2KB(pmc.PeakPagefileUsage));
  39. std::cout<<output<<std::endl;
  40. }

   内存增长后面定位在 getString() 函数上面。

   原因是,我的dll是用 vs2010生成的。 但我调用的工程是 vs2003的工程。 而Connector/c++返回的是 std::string ,应该是编译器实现不一样导致内存泄露。

   跨平台使用stl果然要小心啊。

Mysql: Connect/C++ 使用过程中发现返回 std::string 造成的内存泄露的更多相关文章

  1. 常见Code Review过程中发现的问题-续

    上一篇列举了一些比较常见的Code Review问题列表,文末有链接,可追溯查看.本篇为上篇的姊妹篇,继续列举一些上篇遗漏的或不易发现的问题清单,希望能整体性把一些常见的问题表述出来. 测试数据不具有 ...

  2. 为Secure Store Service生成新密钥,解决“生成密钥过程中发现错误”的问题

    我们集成TFS和SharePoint Server以后,一个最常见的需求是通过SharePoint Server的Excel Service读取TFS报表中的信息,利用Excel Service的强大 ...

  3. 调试过程中发现按f5无法走进jdk源码

    debug 模式 ,在fis=new FileInputStream(file); 行打断点 调试过程中发现按f5无法走进jdk源码 package com.lzl.spring.test; impo ...

  4. Hive通过查询语句向表中插入数据过程中发现的坑

    前言 近期在学习使用Hive(版本号0.13.1)的过程中,发现了一些坑,它们也许是Hive提倡的比关系数据库更加自由的体现(同一时候引来一些问题).也许是一些bug.总而言之,这些都须要使用Hive ...

  5. MySQL 5.7 安装过程中遇到的坑

    在安装的过程中遇到了几个坑,特地记录下来.启动的时候会有有个错误: 大意为mysql退出且更新不了pid文件. 查看error.log,如图: 大意为ibdtata1文件不够,初始化的时候页数太大.初 ...

  6. 常见Code Review过程中发现的问题

    软件环境:Spring MVC + MyBatis 主要体现在两个方面,一个是编码习惯问题,另一个是编码质量的问题.编码习惯主要有日志编写.代码注释以及编码风格的问题,而编码质量则与很多方面相关,比如 ...

  7. 在网站制作过程中发现的block和inline-block不同。

    inline-block,简单来说就是在CSS中通过display:inline-block对一个对象指定inline-block属性,可以将对象呈递为内联对象,但是对象的内容作为块对象呈递.有时既希 ...

  8. 类型安全且自动管理内存的返回 std::string 的 sprintf 实现

    在这篇博文里,我提到了一个例子,说的是使用C++实现类型安全的printf.这个例子很惊艳,但是在我写程序的时候,并非那么"迫切"地需要它出现在我的工具箱中,因为它并不比普通的pr ...

  9. JS高程中的垃圾回收机制与常见内存泄露的解决方法

    起因是因为想了解闭包的内存泄露机制,然后想起<js高级程序设计>中有关于垃圾回收机制的解析,之前没有很懂,过一年回头再看就懂了,写篇博客与大家分享一下. #内存的生命周期: 分配你所需要的 ...

随机推荐

  1. windows平台安装redis服务

    有时候我们需要在windows平台上使用redis作为缓存服务,这个时候就需要将redis安装为window服务. 现在将我安装过程记录下来,方便自己或者有类似需求的同学参考.主要是参考网上现有的例子 ...

  2. WebBrowser无法显示招商银行password输入控件的问题

    本文由CharlesSimonyi发表于CSDN博客:http://blog.csdn.net/charlessimonyi/article/details/30479131转载请注明出处 之前就看到 ...

  3. MPU6050读取FIFI数据时mpu_dmp_get_data的返回值一直是1

    试验中发现:不断进行循环读fiffo就可以得到正常数据.形如这样 );//返回值:0,DMP成功解出欧拉角 printf("pitch=%f\troll=%f\tyaw=%f\r\n&quo ...

  4. 歌词字幕转换制作专家转换LRC-UTF,出错问题,乱码问题,格式问题

    我使用歌词字幕转换制作专家把LRC字幕格式转换成UTF格式后竟然是乱码,求助怎么解决. 编码问题... 转换之前,要先把它处理成ANSI码.先用记事本打开lrc,然后文件-> 另存为,在对话框下 ...

  5. xtrabackup迁移单独一张INNODB表

  6. cocos2d-x开发记录:二,基本概念(动作,动画,坐标系统)

    既然我们选择用cocos2d,那么他里面的一些基本概念我们肯定是要熟悉下的,以下资料来源于官网,英语好的可以直接去官网看. 一.Actions(动作) 动作都由于CCNode对象发出.这些动作通常修改 ...

  7. WCF小问题总汇

    1.Q: WCF服务有没有构造函数或者静态构造函数? A:都不可用 2.Q: WCF中如何使用全局变量? A:用session绑定,或者静态变量 3.Q: WCF在WPF一直报xaml错误 A:不要把 ...

  8. 【Android】17.0 第17章 服务绑定—本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-03-03 一.简介 通过服务绑定(Bound Services),可以轻松实现后台服务与界面(UI)的交互. 二.本章示例主界面 1. ...

  9. rabbitmq增加vhost

    查看当前rabbitmq上的vhost列表: # rabbitmqctl list_vhosts Listing vhosts ... / vhost2 添加名为demo的vhost虚似主机: rab ...

  10. angular学习笔记(二)-创建angular模块

    如果在页面的html标签(或任意标签)中添加ng-app,表示对整个页面应用angular来管理. 他是一个模块. 模块有助于把东西从全局命名空间中隔离. 今天学习如何自定义创建模块: <!DO ...