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!


Anmelden zum Antworten