PRB: Modifying CWinApp Members Causes Error in DBGHEAP.CLast reviewed: September 15, 1997Article ID: Q154744 |
The information in this article applies to:
SYMPTOMSThe error below may occur in an MFC application where one of the following is assigned a value by the programmer:
CWinApp::m_pszAppName CWinApp::m_pszRegistryKey CWinApp::m_pszExeName CWinApp::m_pszHelpFilePath CWinApp::m_pszProfileNameThe following error is displayed in a message box:
Debug Assertion failed Program: my.exe File: dbgheap.c Line: 1017 Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)Developers may see this error when they are upgrading from an earlier version of Visual C++ to Visual C++ versions 4.2 or 5.0.
CAUSEThe CWinApp destructor in MFC included with Visual C++ 4.2 and 5.0 now frees the data assigned to the member variables shown above by passing the pointer to the free() function. Doing this prevents memory leaks, which would occur if an MFC regular DLL were dynamically loaded and unloaded.
RESOLUTIONThis behavior is by design. If you assign a value to m_pszAppName, m_pszRegistryKey, m_pszExeName, m_pszHelpFilePath, or m_pszProfileName, the data must be dynamically allocated on the heap. You may want to use the _tcsdup() run-time library function to do this. Also, free the memory associated with the current pointer before assigning a new value. Here is an example:
// First free the string that was allocated by MFC in the startup // of CWinApp. The string is allocated before InitInstance is // called. free((void*)m_pszProfileName); // Change the name of the .INI file--CWinApp destructor will free // the memory. m_pszProfileName=_tcsdup(_T("d:\\somedir\\myini.ini")); |
Additional query words: 4.10 port porting strdup
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |