今天偶然在网上看到一篇文章
void
Test()
... {
std::stringstream temp;
}
... {
std::stringstream temp;
}
上面这么一个代码,会产生4个字节的内存泄露,我赶快去查负责的工程项目,ft,才发现stringstream是多么基础的设置,如此多的代码用到,就算不直接用到也会被boost用到,运行一看原来开发中的工程项目10分钟有大概1m的泄露,晕死,如此基础
在网上一查,ms已经知道并且解决了,http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98861
原来所有的std::iostream子类都会泄露,就是说fstream也会了。彻底没有语言了。赶快去打补丁吧。
根据网上信息查了下问题,xiosbase:514行有这么一段代码:
void
__CLR_OR_THIS_CALL _Init()
... { // initialize a new ios_base
_Ploc = 0;
_Except = goodbit;
_Fmtfl = skipws | dec;
_Prec = 6;
_Wide = 0;
_Arr = 0;
_Calls = 0;
clear(goodbit);
_Ploc = _NEW_CRT locale;//<--此处new了一个4字节大小的类,但是销毁的时候没有删除......
}
... { // initialize a new ios_base
_Ploc = 0;
_Except = goodbit;
_Fmtfl = skipws | dec;
_Prec = 6;
_Wide = 0;
_Arr = 0;
_Calls = 0;
clear(goodbit);
_Ploc = _NEW_CRT locale;//<--此处new了一个4字节大小的类,但是销毁的时候没有删除......
}
又是locale出现问题,之前locale导致fstream无法用中文路径名来成功构造,ft,这个写locale的人应该打一顿