Segment violation beim wiederholten aufrufen einer Funktion (Xpress MP)



  • Hallo,

    ich hoffe, dass ich hier halbwegs richtig bin und mir jemand einen Lösungshinweis geben kann.
    Ich habe ein C-Programm geschrieben, das zur Lösung eines linearen Optimierungsproblems den Optimizer von Xpress MP aufruft. Dazu muss in C ein Xpress-Problem erzeugt werden, dann die Daten als Array geladen und anschließend das Problem optimiert werden.

    int i;
    int status;
    XPRSprob prob;            /* Xpress-Variable */
       /* Variablen bzw. Arrays ncol, nrow, rowtype, rhs, obj, colbeg, rowidx, matval, lb und ub wurden bereits angelegt */
    
    XPRSinit(NULL);           /* Xpress-Optmizer aufrufen */
    
    XPRScreateprob(&prob);    /* Neues Problem 'prob' erzeugen */
    
    for ( i=0; i<1; i++ ) {
      XPRSloadlp ( prob, "Test", ncol, nrow, rowtype, rhs, NULL, obj, colbeg,
         NULL, rowidx, matval, lb, ub );   /* Problem 'prob' laden, alles andere sind die zugehörigen Daten */
    
      XPRSminim ( prob, NULL );		/* Problem optimieren */
    
      XPRSgetintattrib ( prob, XPRS_LPSTATUS, &status );	/* Status prüfen */
    
      printf ( "Status: %d\n", status );
    }
    

    Soweit klappt das ganz gut, möchte ich allerdings mein Problem zweimal hintereinander lösen (i<2), bekomme ich bei der Ausführung des Programms eine Segment Violation (also eine Speicherzugriffsverletzung, oder?) beim zweiten (!)Laden (XPRSloadlp bei i=1):

    Exception 0xc0000005
    Segment violation
    Address: 0x7110ead0

    Mit einem anderen Testprogramm (mit kleineren Arrays) taucht der Fehler nicht auf, also müsste das von Xpress so eigentlich gehen. Wenn ich ein neues Problem erzeuge und mit den gleichen Daten löse bekomme, ich aber auch keine Fehlermeldung - an den Arrays kann es also eigentlich auch nicht liegen (zumal es ja das erste Mal funktioniert)...

    Kann mir jemand einen Tipp geben, wie ich rausfinde, wo das Problem liegt und wie es zu lösen ist? Herzlichen Dank!


Anmelden zum Antworten