发现一个一直隐藏的超级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)
没有内存泄露
[解决办法]
不知道微软网站有没有相关的报告。
[解决办法]
这么简单又常用的函数,该不会吧
[解决办法]
路过看看
[解决办法]
纯属路过。。。。。。。。