




























看了7cat转了个贴子,才发现用VC2005之前有件很重要的事要做,一件非常重要的事情,重要到不做这件事情,你无法使用VC2005。因为:
2005 CRT memory leaks: std::basic_iostream ( affects std::stringstream, std::fstream, probably others )!!!
这真是件让人郁闷的事情!下面的代码将重现这个错误:
1 #include <sstream>
2
3 int main()
4 {
5 unsigned int x = 10000000;
6 while( x-- )
7 {
8 std::iostream s(0);
9 }
10 }
手动操作的说明:
References:
P.J. Plauger, Dinkumware - Supplied the modified constructors.
"Building the Run-Time Libraries, MSDN2 online, http://msdn2.microsoft.com/en-us/library/k9a8ehy3.aspx - How to rebuild the MSVC runtime libraries.
Workaround Steps:
1. Change the relevant constructor in
{C:\Program Files\Microsoft Visual Studio 8}\vc\include\istream and
{C:\Program Files\Microsoft Visual Studio 8}\vc\crt\src\istream
* directory between {} is the location of the MSVC 8 install directory
explicit __CLR_OR_THIS_CALL basic_iostream(basic_streambuf<_Elem,_Traits> *_Strbuf)
: basic_istream<_Elem, _Traits>(_Strbuf, false),
basic_ostream<_Elem, _Traits>(_Noinit, false)
{ // construct from stream buffer pointer
}
注:修改前内容
explicit __CLR_OR_THIS_CALL basic_iostream(basic_streambuf<_Elem, _Traits> *_Strbuf)
: basic_istream<_Elem, _Traits>(_Strbuf, false),
basic_ostream<_Elem, _Traits>(_Strbuf)
{ // construct from stream buffer pointer
}
2. Change the relevant constructor in
{C:\Program Files\Microsoft Visual Studio 8}\vc\include\ostream and
{C:\Program Files\Microsoft Visual Studio 8}\vc\crt\src\ostream
__CLR_OR_THIS_CALL basic_ostream(_Uninitialized, bool _Addit = true)
{ // construct uninitialized
if (_Addit)
ios_base::_Addstd(this); // suppress for
iostream
}
注修改前内容:
__CLR_OR_THIS_CALL basic_ostream(_Uninitialized)
{ // construct uninitialized
ios_base::_Addstd(this);
}
3. Rebuild the MSVC libraries by running:
{C:\Program Files\Microsoft Visual Studio 8}\vc\crt\src\bldnt.cmd
* See reference link from description for details on rebuilding the MSVC libraries.
注:注意使用前需要设置一个环境变量,makefile文件中有相关说明
# If your MSVC++ 8.0 installation is not in the default installation path
# of "\Program Files\Microsoft Visual Studio 8\VC" on the current drive,
# set the environment variable VCTOOLS to point to the main directory
# of your installation. (For example, "set VCTOOLS=C:\VS.NET\VC8")
4. Modify the Visual Studio project files
a. Properties->Linker->Input , "Ignore Specific Libraries" : msvcprt.lib;msvcrt.lib
b. Properties->Linker->Input, "Additional Dependencies" :
"{C:\Program Files\Microsoft Visual Studio 8}\vc\crt\src\build\intel\sample_p.lib"
"{C:\Program Files\Microsoft Visual Studio 8}\vc\crt\src\build\intel\_sample_.lib"
* Refer to reference link from description on details of the file naming.
5. Put the sample_p.dll and _sample_.dll in the same directory as your app ( or follow the rules for side-by-side deployment).
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。