Difficult problem on Win64, with STL

I am working on a win64 version of a multi-platform program, and am having problems with occasional crashes. The below stack trace shows a typical fault from a crash dump written by drwtsn32.
Looking up the return addresses in the .map file for the executable certainly points to a location in the program that is consistent with making the calls into the C++ library that are indicated in stack trace (it is nearly always faulting in basic_string::assign()). I assume assign() may fail with bad_alloc, but the machines have plenty of free memory (8Gb). The code that is faulting in below instance is simple - just assigning a string constant to std::string. Such code can not fail, as it is impossible for the assigned value to be uninitialised, or accessed from another thread. I can only guess that memory corruption, or lack of thread safety in STL implementation is problem?
I have run the program in a heap checker (valgrind) on Linux, and there are no visible problems with heap allocation. Same program is absolutely solid on Linux and many UNIX variants. It has run for many years with no reboot on many Linux hosts, under moderately high load (although maybe I am somehow lucky...).
Can anyone please recommend a suitable approach for locating this issue?
Are there known problems with thread safety of Microsoft's implementation of STL (using VC++ 2005 Professional SP1)?

00000000`02c18c38 00000000`77d704bf ntdll!ZwWaitForSingleObject+0xa
00000000`02c18c40 000007ff`6e017d66 kernel32!WaitForSingleObjectEx+0xdf
00000000`02c18ce0 000007ff`6e007507 faultrep!ReportEREvent+0x2306
00000000`02c18d90 000007ff`6e00b05d faultrep!ReportHang+0x27c7
00000000`02c1d260 00000000`77dc01f6 faultrep!ReportFault+0x3ed
00000000`02c1e100 00000000`77dbc2df kernel32!UnhandledExceptionFilter+0x606
00000000`02c1e4f0 00000000`77ee6583 kernel32!SetThreadStackGuarantee+0x1cf
00000000`02c1e520 00000000`77ee455d ntdll!RtlUnwindEx+0x213
00000000`02c1e5b0 00000000`77ee6097 ntdll!RtlSizeHeap+0x7d
00000000`02c1e5e0 00000000`77ef31dd ntdll!RtlLookupFunctionEntry+0x607
00000000`02c1ec90 00000000`7c426b8a ntdll!KiUserExceptionDispatcher+0x2d
00000000`02c1f230 00000000`7c4294d9 msvcp80!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign+0x1a
00000000`02c1f260 00000001`400a67c6 msvcp80!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >+0x29
00000000`02c1f290 00000001`400acb06 exe_svc!+0x55d56
00000000`02c1f430 00000000`781337d7 exe_svc!+0x5c096
00000000`02c1ff20 00000000`78133894 msvcr80!endthreadex+0x47
00000000`02c1ff50 00000000`77d6b6da msvcr80!endthreadex+0x104
00000000`02c1ff80 00000000`00000000 kernel32!BaseThreadStart+0x3a
Topic archived. No new replies allowed.