Article ID: 172398
Article Last Modified on 11/18/2003
APPLIES TO
- The Standard C++ Library, when used with:
- Microsoft Visual C++ 5.0 Enterprise Edition
- Microsoft Visual C++ 5.0 Professional Edition
This article was previously published under Q172398
SYMPTOMS
When you assign a shorter string to an existing string that originally contained a longer string, the assignment corrupts the heap.
When running a debug build, you may see an assertion similar to the following:
CAUSE
This problem is due to a bug in the Standard C++ Library basic_string class implementation. When assigning a shorter string to an existing string that originally contained a longer string, the heap is corrupted. The assignment can be done either through operator=() or assign().
RESOLUTION
To work around the problem, call the string::erase member function before assigning the new value to the existing string.
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This problem was corrected in Visual C++ version 6.0 for Windows.
MORE INFORMATION
Steps to Reproduce Behavior
//Compile options needed: /GX #include <crtdbg.h> #include <string> int main() { std::string str, str2; str = "abcdefghijklmnopqrstuvwxyzabcdefghij" ; str2 = str; //Workaround, uncomment the following line //str.erase() ; str = "zyxw" ; _CrtCheckMemory() ; return 0; }
Keywords: kbbug kbfix kbvc600fix KB172398