R
Raj Batra
Hi,
I've created a dll that you can import into python. The function
calls an ostringstream class. Calling this function repeatedly in python
will cause a Microsoft Visual C++ Debug Library error:
Debug Assertion Failed!
Program: C:\Program Files\Python22\python.exe
File: dbgheap.c
Line: 346
Expression: _CrtCheckMemory()
Here are snippets of the code:
// Method called by python via a PySwitchObject
static PyObject * pyCircuit(PySwitchObject * self, PyObject * args)
{
int circuit;
if (!PyArg_ParseTuple(args, "i", &circuit))
{
// Error handling...
}
self->_switch->circuit((U8) circuit);
Py_INCREF(Py_None);
return(Py_None);
}
// Called by pyCircuit method above. Multiple calls to this method
// yield a heap assertion.
void Switch::circuit(U8 c)
{
std:stringstream close;
close << "Some formating...";
// Use the close method - doesn't really matter.
}
The error is always within the constructor or destructor of ostringstream and
in the file called xmutex.cpp (implements mutex lock for iostreams) which
calls the malloc/dealloc functions.
I have tried other streams such as fstream, and get similar behavior.
Switching to a char buffer[] and sprintf is my current work around the
ostringstream issue.
Any thoughts about what is going on?
I'm using Python2.2.2, with Visual C++ 7 (.NET). The error occurs using
both pythonwin and the standard command line python.
Thanks,
Raj
I've created a dll that you can import into python. The function
calls an ostringstream class. Calling this function repeatedly in python
will cause a Microsoft Visual C++ Debug Library error:
Debug Assertion Failed!
Program: C:\Program Files\Python22\python.exe
File: dbgheap.c
Line: 346
Expression: _CrtCheckMemory()
Here are snippets of the code:
// Method called by python via a PySwitchObject
static PyObject * pyCircuit(PySwitchObject * self, PyObject * args)
{
int circuit;
if (!PyArg_ParseTuple(args, "i", &circuit))
{
// Error handling...
}
self->_switch->circuit((U8) circuit);
Py_INCREF(Py_None);
return(Py_None);
}
// Called by pyCircuit method above. Multiple calls to this method
// yield a heap assertion.
void Switch::circuit(U8 c)
{
std:stringstream close;
close << "Some formating...";
// Use the close method - doesn't really matter.
}
The error is always within the constructor or destructor of ostringstream and
in the file called xmutex.cpp (implements mutex lock for iostreams) which
calls the malloc/dealloc functions.
I have tried other streams such as fstream, and get similar behavior.
Switching to a char buffer[] and sprintf is my current work around the
ostringstream issue.
Any thoughts about what is going on?
I'm using Python2.2.2, with Visual C++ 7 (.NET). The error occurs using
both pythonwin and the standard command line python.
Thanks,
Raj