Klasse in Array
-
Hi.
Ich habe mal wieder ein Problem. Und zwar habe ich eine Klasse, die ich in ein Array packen will. Eigentlich wie immer, doch das komische ist, dass die DLL (also das Programm) abstürzt, sobald ich etwas in den Array packen will. Gleiches beim std::vector - ein Crash.Wie kann ich das Problem lösen? Da es die einzige Klasse ist, die Daten aus der Python C-API beinhaltet, denke ich, dass es daran liegt.
Hier ist mal die Klasse:
class CPythonClass { public: CPythonClass(char *pszName, char *pszRepr, int iSize, PyClass_Dealloc_t pDealloc, PyClass_New_t pyNew, PyClass_Init_t pyInit, char *pszDescription); void addMethod(char *pszName, PyCFunction pyCallback, char *pszDescription); void addMember(char *pszName, int iType, int iOffset, char *pszDescription); public: PyTypeObject m_pyType; char *m_pszName; private: PyMethodDef m_pyMethods[20]; PyMemberDef m_pyMembers[20]; int m_iMethodCounter; int m_iMemberCounter; };Definition des Arrays oder des Vectors:
CPythonClass *m_arrClasses[20]; std::vector<CPythonClass*> m_vecClasses;Hinzufügen:
CPythonClass *pClass = new CPythonClass(...); this->m_arrClasses[0] = pClass; // Crash this->m_vecClasses.push_back(pClass); // CrashGibt es eine Lösung dafür? Woran liegt der Fehler?
Gruß
-
CPythonClass *m_arrClasses[20];
was willst du hiermit machen?
hast du auch an das new gedacht?std::vector<CPythonClass*> m_vecClasses
für die ptr gibts nen grund!?CPythonClass *pClass = new CPythonClass(...); this->m_arrClasses[0] = pClass; // Crash this->m_vecClasses.push_back(pClass); // CrashZeig mal die gesamte Fkt und wie du sie aufrufst...
bb
-
Klar gibt es für den Pointer einen Grund. Ich will ja einen Pointer einfügen, damit ich Zugriff auf die Klasse bekomme. Das mache ich schon ewig so und funktioniert auch bestens.
Wieso brauche ich denn beim Array ein new?
Die Instanzen von CPythonClass erzeuge ich erst nach und nach, es sind ja nicht von Anfang an direkt 20 Stück vorhanden.Hier ist die Funktion, so wie ich sie immer gestalte:
CPythonClass *CPython::addClass(CPythonClass *pClass) { //this->m_arrClasses[this->m_iCounter++] = pClass; //this->m_vecClasses.push_back(pClass); return pClass; }Gruß