Installing Windows XP Service Pack 2 may result in SmartHeap error messages.
Installing XP Service Pack 2 may cause SmartHeap to report "MEM_BAD_POINTER" errors in a message box on the Desktop, even though there was no such problem previously. We have confirmed that this problem is likely to occur under the following conditions:
1) one or both of the boxes on the Languages tab of Control Panel/Regional and Language Options is checked (these boxes install support for East Asian languages and complex script/right-to-left languages).
2) Service Pack 2 for XP is installed.
3) the user launches an application linked to one of the SmartHeap runtime dynamic libraries (shdw32m.lib or shdw32mt.lib). All versions of runtime non-smp SmartHeap are affected, but it appears that the problem does not occur if debug SmartHeap or any SmartHeap static lib are used. SmartHeap/SMP users note: The problem probably occurs when the app links to the runtime SmartHeap/SMP dynamic lib shdsmpmt.lib, but since runtime SmartHeap/SMP ignores heap errors, and since the bug appears to be benign, the user is never aware that there's a problem.
The affected app will run normally, then issue a MEM_BAD_POINTER error at app termination.
This appears to be a bug in Service Pack 2, and we have contacted Microsoft. We will update the status of this issue on our support page (http://www.microquill.com/support.html) when new information is available..
What MicroQuill is doing about this problem?
-
We have contacted Microsoft multiple times. No word yet on when a fix might be available.
-
As of 11/09/04 we have available a SmartHeap shw32.dll which checks to see if a MEM_BAD_POINTER error is due to this service pack 2 bug. If it is, then by default SmartHeap will not report the error to the desktop. Note that this is not a true fix: a fix is beyond are capability, since the problem is in a Microsoft DLL. But in most cases the error is benign, so if the error message is suppressed, users won't be aware of it.
Send an email to sp2@microquill.com if you want to receive one of these modified SmartHeap DLLs.
What can you do about this problem? Some options:
-
Contact Microsoft and complain. Most likely they will reflexively explain that it's a MicroQuill problem. Please emphasize that this is a Microsoft bug in the usp10.dll that ships with Service Pack 2. Tell them to contact us (email support@microquill.com) for more info.
-
You could delay installing Service Pack 2 until this issue is resolved.
-
If you've installed SP2 and are seeing this problem, and if you don't need support for East Asian languages, right-to-left languages, etc, uncheck the box(es) in the Regional and Language Options applet and follow the instruction for uninstalling (a reboot may be required).
- As of 11/9/04, you can install our DLL that suppresses the error report (see above).
-
Programmers who have access to source code of the affected app and want a temporary workaround can make the following call before the app terminates:
#include "smrtheap.h"
MemSetErrorHandler(NULL);
This won't fix the error, but it will suppress error reporting. Contact MicroQuill tech support (support@microquill.com
) if you have any questions.
Many thanks to Serge Lalonde at Infolytica (http://www.infolytica.com/) for his quick reporting of this problem, and for fingering the 'East Asian languages' option as one of the conditions.
我是从以下地址搜索到的:
http://www.rational-club.org/index.php?s=85da064ceffa922ca819b033d2f7effd&showtopic=583&pid=2265&st=0&#entry2265
原文地址:
http://www.microquill.com/kb/xpsp2.htm