run-time check failure #2 - stack around the variable was corrupted
-
Hallo zusammen!
Ich habe folgendes Problem:
Ich rufe in einem MATLAB-Skript eine DLL-Datei auf. Die DLL-Datei besteht hauptsächlich aus dem folgenden C-Code:double* gleichgewicht(double v[]) { LI noerr, i, j, nP, elemente, nPC, numcon, Temperatur; DB vals[2], result; int Konstituenten [7], Phasen [7]; //char name[TQSTRLEN]; double ergebnis; double r[7]; double Druck; Temperatur = 1200; Druck = 1; Phasen[1] = 1; Phasen[2] = 7; Phasen[3] = 8; Phasen[4] = 9; Phasen[5] = 1; Phasen[6] = 11; Phasen[7] = 10; Konstituenten [1] = 2; Konstituenten [2] = 1; Konstituenten [3] = 1; Konstituenten [4] = 1; Konstituenten [5] = 7; Konstituenten [6] = 1; Konstituenten [7] = 1; . . . elemente = 7; for (j=1; j<=elemente; j++) { tqgetr ("A", Phasen [j], Konstituenten[j], &ergebnis, &noerr); v[j] = ergebnis; } return v; }
Wenn ich das MATLAB-Skript ausführe kommt folgende Fehlermeldung:
run-time check failure #2 - stack around the variable was corrupted
Bei den Variablen handelt es sich um Phasen und Konstituenten.Der Programmaufruf in MATLAB:
[x] = calllib('ChemApp_DLL', 'gleichgewicht', a);
Wo liegt der Fehler? Wie kann ich das Problem beheben?
Falls noch Informationen benötigt werden, liefere ich diese gerne nach.Vielen Dank im Voraus!
Gruß metzger
-
Edititer mal Dein Posting und füg' die Code-Tags ein: Code markieren und "C"-Knopf unter den Smileys drücken.
Ein Index wird in C immer von 0 an gezählt. Also gibt es z.B.
Phasen[0]
-Phasen[6]
.Phasen[7]
zu beschreiben ist ein Fehler.
-
Plus du prüfst die Dimension des Arguments v nicht. Deine for loop wird also Matlab komplett abstürzen lassen wenn du mal (zufällig) ein array übergibst das kleiner als 7 ist, das solltest du unbedingt abfangen...
-
Vielen Dank für die superschnellen und hilfreichen Antworten!
Mit der neuen Indexierung 0-6 scheint es zu funktionieren.
-
metzger1887 schrieb:
Vielen Dank für die superschnellen und hilfreichen Antworten!
Mit der neuen Indexierung 0-6 scheint es zu funktionieren.Das musst du aber bei allen Arrays machen!
-
Ja. Das habe ich hoffentlich
Phasen und Konstituenten habe ich abgeändert. Zudem lasse ich i und j bei 0 loslaufen wodurch v und r auch den richtigen Index haben.
Danke für den Hinweis!