[c++]Access Violation am Programmende

nacho25

Grünschnabel
Ich hoffe, ich kann mein Problem treffend erklären:
Habe ein Programm geschrieben, das mit einer txt-Datei arbeitet, und mit Visual C++ kompiliert, gelinkt, ausgeführt. Es läuft korrekt bis zum Ende durch, die Bildschirmausgabe ist einwandfrei und direkt vor dem return in main kriege ich noch ne Ausgabe auf den Bildschirm. Dann kriege ich (nur manchmal, bei einigen Dateien nicht-warum bloß?) die Fehlermeldung, dass meine .exe-Datei beendet werden muss: Unhandled Exception...Access Violation. Der Debugger zeigt mir dann das Problem in einer Datei namens fflush.c, die irgendwo in meinem Visual-Verzeichnis liegt. Dort kann anscheinend auf ein Array namens __piob an der Stelle i nicht zugegriffen werden...
Habe das Gefühl, mein Problem hat nicht direkt was mit meinem Programmcode zu tun. Irgendjemand schonmal so was gesehen oder eine Idee, was das sein könnte?

Vielen Dank schonmal!
 
Ok, hab ihn angehängt. Kurz was zum Programm: Es geht um das Lösen von Ungleichungssystemen mit zwei Variablen pro Ungleichung. Die Variablen sind beschränkt und die Lösung muss ganzzahlig sein. Mein Programm soll folgendes tun: Parameter des Ungleichungssystems aus der Datei auslesen und in verschiedene Arrays schreiben, die Variablen und Ungleichungen in eine SAT-Theorie umgewandeln (macht nix, wenn man nicht weiß, was das ist), Lösbarkeit der SAT-Theorie überprüfen und ggfs. Lösung bezogen auf die ursprünglichen Variablen berechnen.

Habe inzwischen den Hinweis bekommen, daß es wahrscheinlich irgendein Speicherproblem ist. Habe einige externe Variablen- vielleicht zu viele/zu große?

Ach ja, mit "testbsp.txt" läuft das Programm, mit "test10.txt" tritt die Fehlermeldung auf.

Bitte nicht über meinen uneleganten Programmierstil wundern...
 

Anhänge

  • feasibility.zip
    5,3 KB · Aufrufe: 26
Nur ganz schnell ein paar Erkenntnisse von mir. Keine Ahnung ob das was hilft, aber probier mal:

Code:
int n, m, *l, *u, **ungl, anzahlbinvar, size, **sat, **inzidenzliste, *anzahlklaus, *zaehler;
Code:
int n;
int m;
int size;
int *l = NULL;
int *u = NULL;
int **ungl = NULL;
int **sat = NULL;
int **inzidenzliste = NULL;
int *anzahlklaus = NULL;
int *zaehler = NULL;

Also alle Variablen mit * auf NULL zu initialisieren (weiss nicht ganz ob das new egal ist).
 
moin


Was natürlich gleich auffällt ist das "test10.txt" um einiges größer als "testbsp.txt" ist.
Also mal gucken ob sich irgendwelche Variablen im Speicher in die quere kommen.


mfg
umbrasaxum
 
umbrasaxum hat gesagt.:
moin


Was natürlich gleich auffällt ist das "test10.txt" um einiges größer als "testbsp.txt" ist.
Also mal gucken ob sich irgendwelche Variablen im Speicher in die quere kommen.


mfg
umbrasaxum

Ja, sowas denke ich mir auch. Allerdings hatten alle Variablen, die ich mir im Laufe des Programms zum Testen mal habe ausgeben lassen, auch den Wert den sie haben sollten. Und mich verwirrt nach wie vor, daß die access violation was mit dieser fflush-Datei zu tun hat...
 
moin


Bei mir stoppt er an folgender Stelle:
Code:
//Klauseln mit x als gestrichen markieren
for(i=0; i < anzahlklaus[-x-1+anzahlbinvar]; i++)
{
	mark[inzidenzliste[-x-1+anzahlbinvar][i]]= 1;
}

In Datei: basicshn2.cpp
Zeile: 557

Als es stoppte hatte inzidenzliste[-x-1+anzahlbinvar][i] den Wert -33686019


mfg
umbrasaxum
 
Zuletzt bearbeitet:
Zurück