unhandled exception of type 'System.Runtime.InteropServices.SEHException'
-
Fehler
An unhandled exception of type 'System.Runtime.InteropServices.SEHException' occurred in IsoModuleTest.exe Additional information: External component has thrown an exception.
landet in mlock.c
void __cdecl _unlock ( int locknum ) { /* * leave the critical section. */ LeaveCriticalSection( _locktable[locknum].lock ); } <------
Es scheint sich hier um einen Thread Fehler zu handeln. Da ich in meinem Programm bis jetzt noch keine Threads verwende stellt sich mir die Frage ob C++/CLI hier intern mit threads arbeitet woraus der Fehler resultieren könnte !?
Da der Fehler bis jetzt immer woanders auftritt (klar bei threads) ist es sehr schwer den Bug zu finden!
Ich verwende nur für die GUI managed C++, der Rest ist alles ISO C++ (in 2 Klassen verwende ich auch das Template gcroot da ich dort managed Komponenten benötige; beim Weglassen allerdings keine Änderung)
Bitte um Tipps woran es liegen könnte!
Danke und mfg
leon22
-
Wenn ich in Visual Studio unter Debug->Exceptions noch C++ und CLR Exceptions einstelle bekomme ich einen
Microsoft C++ exception: std::bad_alloc at memory location 0x0015e20c..
Also new() kann nicht genügend angeforderten Speicher reservieren (tritt bei einem std::vector auf)!
std::bad_alloc endet in xmemory
_STD_BEGIN // TEMPLATE FUNCTION _Allocate template<class _Ty> inline _Ty _FARQ *_Allocate(_SIZT _Count, _Ty _FARQ *) { // check for integer overflow if (_Count <= 0) _Count = 0; else if (((_SIZT)(-1) / _Count) < sizeof (_Ty)) _THROW_NCEE(std::bad_alloc, NULL); // allocate storage for _Count elements of type _Ty return ((_Ty _FARQ *)::operator new(_Count * sizeof (_Ty))); <------ }
Wird folgend verwendet:
Klasse A in h deklariert: vector<int> *testVector; ClassA::ClassA() { testVector = new std::vector<int>(); ... } ClassA::DoSomething() { ClassB *classB = new ClassB(testVector); } Klasse B in h deklariert: vector<int> *testVectorB; ClassB::ClassB(vector<int> *testVector) { testVectorB = testVector; ... }
Kann aber nicht sein dass er keine 32 int Werte aufnehmen kann (wird per push_back reingeschrieben)
mfg
-
Niemand ?!
mfg leon22
-
Schalte mal den CLR Support aus.
Dann zeige den minimalen, aber dennoch kompletten Code, der den Fehler reproduziert.
-
Hi !
Danke für den Tip! (würde aber leider den Rahmen sprengen)
Ich vermute ja dass es durch das Mischen (GUI in CLI, Rest ISO C++) zu Problemen kommt. Welche GUI Bibliothek wäre für ISO C++ mit Visual Studio 2008 zu empfehlen?
Danke schon mal im Voraus !
mfg leon22
-
oh, da gibts viele... probiers doch mal mit wxWidgets oder FLTK