Microsoft KB Archive/172398

= FIX: Debug Assertion When Assigning to STL String =

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:

Debug Error! Program DAMAGE: after Normal block (#NNN) at 0xNNNNNNNN



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.

<div class="resolution_section">

RESOLUTION
To work around the problem, call the string::erase member function before assigning the new value to the existing string.

<div class="status_section">

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.

<div class="moreinformation_section">

Steps to Reproduce Behavior
//Compile options needed: /GX #include <crtdbg.h>  #include

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

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.