Tim Peters <tim.one@comcast.net> writes: > Question: I don't have VC7 and don't know what it does. The traceback > ended in MSVCRTD.DLL, which I recognize as MS's debug-mode C runtime DLL for > VC6. Does VC7 use the same DLL name, or some other DLL name? The same one. > If the latter, my theory is that PyObject_New used the MSVC6 malloc, > but that PyObject_NEW used the MSCV7 malloc (due to macro expansion > in your code). Brilliant theory! > In both cases the MSVC6 free() gets called. Ah, correct. I misread "someone's" code; the delete function just calls PyObject_Del(). I think "someone" probably ought to do something more explicit to control where things are allocated/freed. But for now, I think using PyObject_New/PyObject_Del is reasonable. > But the MSVC6 and MSVC7 heaps are distinct, so the debug-mode MSVC6 > free() complains because it wasn't the source of the memory getting > freed. A missing piece of the puzzle: what was the error msg at the > time this thing died? unhandled exception at 0x10213638 (MSVCRTD.DLL) in python_d.exe: User breakpoint. It seems to me that in light of all this, it's probably worth noting this difference between PyObject_New and PyObject_NEW in the docs. People *will* develop extension modules with different compilers from the one Python was compiled with... I know, submit a patch. -- Dave Abrahams Boost Consulting www.boost-consulting.com
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4