Hallo Leute..
Hab wieder mal ein Problem: Also ich hab eine Klasse und die Methode 'createNewNode()', die mir einen Pointer auf ein 'vector<Vec3>' haelt, wobei 'Vec3' eine Klasse ist, die mir einen 3-dimensionalen Vektor repraesentiert. Diese Methode und 'createSubTree()' zusammen entspraechen einem Rekursiven Methodenaufruf. Hier mal die wichtigsten Code-Stuecke:
void BlaBla::createNewNode(vector<Vec3> *vertices, ...)
{
if (...)
{
vector<Vec3> *node_vertices = new vector<Vec3>;
node_vertices->resize(...);
unsigned int index = 0;
for (unsigned int ivert=0; ivert<num_vertices; ivert++)
{
if (...)
{
(*node_vertices)[index] = (*vertices)[ivert];
++index;
}
}
...
createSubTree(my_array);
...
node_vertices->clear();
delete node_vertices;
}
}
...
void BlaBla::createSubTree(vector<Vec3> *array)
{
...
// Werte von array werden veraendert/bearbeitet
createNewNode(array);
...
}
Alles anzeigen
Der Compiler bemaengelt nichts und kompiliert ohne Warnings. Zur Laufzeit bekomme ich nach einer Weile die Fehlermeldung: 'Unhandled exception at 0x778813b1 in MyApp.exe: User breakpoint.'. Der Call Stack gibt Folgendes aus:
MyApp.exe!_CrtIsValidHeapPointer(const void * pUserData=0x022610f8) Line 1807 C
MyApp.exe!_free_dbg_lk(void * pUserData=0x022610f8, int nBlockUse=1) Line 1132 + 0x9 C
MyApp.exe!_free_dbg(void * pUserData=0x022610f8, int nBlockUse=1) Line 1070 + 0xd C
MyApp.exe!operator delete(void * p=0x022610f8) Line 369 + 0xb C++
MyApp.exe!std::allocator<SomeLib::Vec3>::deallocate(SomeLib::Vec3 * _Ptr=0x022610f8, unsigned int __formal=402) Line 132 + 0x9 C++
MyApp.exe!std::vector<SomeLib::Vec3,std::allocator<SomeLib::Vec3> >::_Tidy() Line 797 C++
MyApp.exe!std::vector<SomeLib::Vec3,std::allocator<SomeLib::Vec3> >::clear() Line 745 C++
MyApp.exe!createNewNode(std::vector<SomeLib::Vec3,std::allocator<SomeLib::Vec3> > * vertices=0x0012f340) Line 334 C++
Tja, ich bin mit meiner Weissheit am Ende.. Ich weiss nur, dass die Methode '_CrtIsValidHeapPointer()' ueberprueft, ob der Pointer (in diesem Fall, wohl der Pointer auf das array 'node_vertices') im lokalen Heap liegt oder nicht. Anscheinend ist das nicht der Fall.. Wieso eigentlich nicht? Hat jemand einen Rat wo der Fehler sein koennte?
Dank im Voraus fuer jeden Hint..
ciao..