VS2010 System.Runtime.InteropServices.SEHException bei new operator
-
Hi, wenn ich folgenden Code ausführe kommt es bei mir zu obigen Problem,
*An unhandled exception of type 'System.Runtime.InteropServices.SEHException' occurred in MFF_Analyse.exe
Additional information: External component has thrown an exception.*
zunächst eine Bechreibung der Variablenvec = fac.decomposeToBands(values,sigmas,false,5);ergibt einen std::vector der Länge 5 von einzelnen Matrizen mit Komplexen zahlen,der vector enthält die Werte ordnungsgemäss,
myComplex * data; // Holt die matrizen aus vec double * transformedData; //Für Visuelle darstellung eines grauwertbildes [0-255] for(int i = 0; i < 5;i++){ data = vec.at(i); transformedData = fac.transformToGrayLevelRange(data,256); ....Nimm transformedData und speichere es in einem bitmap ab.... }der fehkler taucht bei fac.transformToGrayLevelRange auf , an einer stelle die ich nciht verstehe nämlich bei
/*Transform to whole range of Gray Levels*/ /* @param data : input data, take only real part @param N : Number of GrayLevels return - int array with transformed values */ double * FFTFactory::transformToGrayLevelRange(myComplex * data,int N){ double Maximum = -32767; //Min Int value double Minimum = 32767; //Max Int value ---->> double * out = new double[height*width]; .... return out; }Interessant ist dass die äussere i schleife variable oft durhlaufen wird bevor der fehler ausgelöst wird, daher manchmal bei i = 2, manchmal bei i = 3, ih verstehe leider nicht woran dies liegen könnte, kann mir jemand bitte weiterhelfen?
Danke,
Lg
MazPS: Ich verwende keine Threads, alles läuft seriell ab!
-
Die Exception kommt von der CLR (.NET).
Ich sehe aber nicht dass .NET gebraucht wird, also schalte mal /clr ab.Simon
-
theta schrieb:
Die Exception kommt von der CLR (.NET).
Ich sehe aber nicht dass .NET gebraucht wird, also schalte mal /clr ab.Sorry, wie meinst du das? / clr abschalten?
Lg
Maz
-
Bei den Projekt Einstellungen gibts CLR Support (oä.).. dort auf Kein CLR Support (oä.) stellen...
-
Und grundsätzlich bei neuen Projekten ein leeres Win32-Konsolenprogramm anlegen (Da ist der Schalter standardmäßig deaktiviert).
-
Hi Leute, ich denke das Problem liegt niht wirklich in diem wie oben angegeben , sondern an einer inewffizienten speicherverwaltung
ich habe oftmals dynamsiche heap allocationen in meinen Funktionen mit ..= new[int someint], die dann retourniert werden, jetzt habe ich gelesen dass diese speicher selbst nach funktionablauf nicht mehr freigegeben werden, sollte ich dann ein konstrukt wie folgend machen?
for(int i =0; i < X; i++){ double * arr; arr = somefunction(arr) -> der output wird mit new erzeigt ....tu etwas mit dem array.... delete[]arr; }
-

-
mazzok schrieb:
Hi Leute, ich denke das Problem liegt niht wirklich in diem wie oben angegeben , sondern an einer inewffizienten speicherverwaltung
Grundsätzlich deutet ein "System." tendenziell auf eine Fehlermeldung aus .Net hin. Und entweder bist du im falschen Forum (C++/CLI wäre für C++ mit .Net, und ja, das ist eine eigene Sprache), oder die Einstellungen deines Projektes stimmen nicht. Unabhängig davon das du vielleicht ein Fehler im Code haben könntest.
-
asc schrieb:
mazzok schrieb:
Hi Leute, ich denke das Problem liegt niht wirklich in diem wie oben angegeben , sondern an einer inewffizienten speicherverwaltung
Grundsätzlich deutet ein "System." tendenziell auf eine Fehlermeldung aus .Net hin.
Nein, ich glaube es gehört zusammen. Als ich schon das erste Mal diesen Thread gelesen habe, hatte ich diese Vermutung, war mir aber nicht so recht sicher. Nun verstärkt sich aber mein Verdacht.
In .Net wird eineSEHExceptionzum Beispiel dann geworfen, wenn von einem C++ Bereich eine C++ Exception in den .Net Teil fliegt. Daher denke ich, dass er einfach einestd::bad_allocException zugeworfen bekommt
Grüssli
-
Dravere schrieb:
In .Net wird eine
SEHExceptionzum Beispiel dann geworfen, wenn von einem C++ Bereich eine C++ Exception in den .Net Teil fliegt. Daher denke ich, dass er einfach einestd::bad_allocException zugeworfen bekommt
Dan sollte der OP in seinem nicht-CLR-Projekt trotzdem zuerst die /clr-Option deaktiviere und dann dem bad_alloc auf die Schliche kommen

-
pumuckl schrieb:
...und dann dem bad_alloc auf die Schliche kommen

mazzok schrieb:
...new[int someint], die dann retourniert werden, jetzt habe ich gelesen dass diese speicher selbst nach funktionablauf nicht mehr freigegeben werden...
Das dürfte dann ja nicht soo schwer sein

-
Hallo, Danke an eure vielen Beiträge
so wie dravere es gesagt hat, es bestand wirklich ein speichermanagement problem, alles funktioniert jetzt problemlos!
Lg
M