首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

发现一个一直隐藏的超级bug,进者有分解决办法

2012-02-23 
发现一个一直隐藏的超级bug,进者有分前言:其实我一直也不知道怎样把int转换成string,于是到网上搜索了一下

发现一个一直隐藏的超级bug,进者有分
前言:其实我一直也不知道怎样把int转换成string,于是到网上搜索了一下,copy使用了,在此以前一直使用的是IntToString里面的内容,可是万万没有想到,居然会有内存泄漏。我的demo在调用了一个函数后内存一直不停的升啊升啊,我一个一个排查了几天今天终于找到了,太高兴了,于是也发出来给大家看看结果。虽然还不知道是为啥,stringstream的介绍实在是不多,找了下c++之父的那本书都没有说什么东西。

#include   <sstream>
#include   <string>
#include   <iostream>
using   namespace   std;
#include   <windows.h>
#include   "psapi.h "
#pragma   comment(lib, "Psapi.lib ")
std::string   IntToString(int   num)//此函数会导致内存泄漏
{
std::stringstream   sstr;
sstr < <num;
return   sstr.str();
}
std::string   IntToString1(int   num)//此函数正常
{      
std::ostringstream       osstrm;      
osstrm < <num;      
return   osstrm.str();  
}

void   use_memory()
{
HANDLE   hProcess   =   GetCurrentProcess();
if(   !hProcess   )  
{
return;
}
PROCESS_MEMORY_COUNTERS   pmc;
GetProcessMemoryInfo(hProcess,&pmc,   sizeof(pmc));
char   buf[256];
sprintf_s(buf, "Use   Memory:   %.4f   M ",pmc.WorkingSetSize/1024/1024.0);
cout < <buf < <endl;
}

int   main()
{
int   i   =   0;
while(true)
{
srand(GetTickCount());
int   value   =   rand()%1000;
string   t   =   IntToString(value);
cout < <i < < "\t\t " < <t < < "\t ";
use_memory();

i++;
}
}

[解决办法]
#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
ostringstream os;
os < <100 < <endl;
string str = os.str();
cout < <str < <endl;

string s = "6.6 ";
istringstream is(s);
float f;
is> > f;
cout < <f < <endl;

cout < <endl;
system( "pause ");
return 0;
}
[解决办法]
路过看看
[解决办法]
你换个编译器再试。我试了intel9.1,BCB6,都没问题
[解决办法]
在我这边测试没有任何问题,不存在内存泄漏

计算工作集大小的差异并不能用来作为内存泄漏的判据!!!
[解决办法]
一般情况下我使itoa,或者sprintf,再或者自己写函数实现

使用stringstream应该不会存在问题的,他与sprintf效果是一样的。
[解决办法]

VC2005 Team+sp1 没泄露
[解决办法]
VS2005的stringstream会有内存泄露,一个对象泄露4个字节,打了SP1就好了.
[解决办法]
jf
[解决办法]
没泄露啊……
[解决办法]
泄得一塌糊涂
[解决办法]

------解决方案--------------------


啊...看来好象是那么回事..
[解决办法]
内存泄露是大问题
[解决办法]
路过看看
[解决办法]
mark
[解决办法]
试一试这个有没有内存泄漏,反正我这里是没有发现
template <class Source, class Target>
inline void ChangeString(const Source& _source, Target& _target)
{
std::stringstream interpreter;
interpreter < < _source;
interpreter > > _target;
}

[解决办法]
up
[解决办法]
Up..
[解决办法]
早泄好~打个补丁就不会了
[解决办法]
学习了……
[解决办法]
我在大学的时候自行编写过 int 转 string的算法
而且不少东西都还是用自己的算法做。
我觉得不至于泄露吧。。。。那么简单的算法。。。
人家作者估计是大手。。。。

[解决办法]
看看

[解决办法]
顶一下,接分...
[解决办法]
JF
[解决办法]
up
[解决办法]
怎么说呢, 这几个io类非常难搞.

[解决办法]
路过看看


[解决办法]
标记一下
[解决办法]
应该没有问题
[解决办法]
Mingw (gcc3.42)
没有内存泄露
[解决办法]
不知道微软网站有没有相关的报告。
[解决办法]
这么简单又常用的函数,该不会吧
[解决办法]
路过看看
[解决办法]
纯属路过。。。。。。。。

热点排行