[c++]Access Violation am Programmende

Guter Hinweis, danke! Mir zwar völlig unverständlich, aber die beiden Arrays zaehler und anzahlklaus haben nicht den gleichen Inhalt- obwohl sie gleich besetzt werden, bins extra Zeile für Zeile durchgegangen Habe einfach den Inhalt von anzahlklaus nach dessen Besetzung per for-Schleife nach zaehler kopiert, um dieses Problem zu lösen. Nichtsdestotrotz kriege ich immer noch die gleiche Fehlermeldung am Schluss...
 
Habe möglichen Fehler gefunden:
Und zwar in der Funktion Trans2Sat():

Code:
for (i = 0; i < m; i++)
{
//Initialisierungen
int x = ungl[i][0];
int y = ungl[i][1];
int zx = u[x]-l[x]+1;
int zy = u[y]-l[y]+1;
a = ungl[i][2];
b = ungl[i][3];
c = ungl[i][4];
int *alphax = new int[zx];
int *alphay = new int[zy];


Gib die Deklarierungen vor der for-Schleife, sonst wird immer deklarierst du die Variablen bei jedem Schliefendurchlauf!
 
Danke für den Hinweis, habs geändert (blöder Fehler). Aber leider besteht das Problem nach wie vor! Habe inzwischen rausgefunden, das sich bei ca. 50 Indizes die Arrays "zaehler" und "anzahlklaus" um 1 unterscheiden. Die betroffenen Variablen weisen keinen besonderen Zusammenhang auf. Habe mit Setzen von bestimmten Breakpoints mit dem Debugger 5 der Indizes beobachtet (bin alle Schleifen Schritt für Schritt durchgegangen...), dann war seltsamerweise bei diesen Indizes alles ok, aber dafür bei anderen nicht! Das soll mal jemand verstehen!
 
moin


Ja daran liegt aber nciht der Fehler!

Der Fehler ist wie ich schon gesagt hab dort:
Code:
//Klauseln mit x als gestrichen markieren
for(i=0; i < anzahlklaus[-x-1+anzahlbinvar]; i++)
{
mark[inzidenzliste[-x-1+anzahlbinvar][i]]= 1;
}

Zur besseren Fehler eingrenzung habe ich das Stück in folgendes geändert:

Code:
for(i=0; i < anzahlklaus[-x-1+anzahlbinvar]; i++)
{
	yxc = inzidenzliste[-x-1+anzahlbinvar][i];
	mark[yxc]= 1;
}

Der Teil steht in PropUnit() und tritt auch wenn PropUnit das 5. mal aufgerufen wird!
Code:
yxc = inzidenzliste[-x-1+anzahlbinvar][i];
Funktioniert noch, ABER yxc hat danach den Wert -33686019 und wenn dann
mark[yxc]= 1; aufgerufen wird, wird versucht auf die -33686019. Stelle eine 1 zu setzen, was selbstverständlich zu nem Fehler führt.


mfg
umbrasaxum
 
@umbrasaxum: Verstehe ich das richtig, das bei Dir das Programm gar nicht bis zum Ende läuft und die Lösung ausgibt? Das wäre schonmal anders als bei mir!

Ich glaube herausgefunden zu haben, dass der Fehler in der Inzidenzliste daher kommt, dass das Array "zaehler" falsch besetzt ist. Danach richtet sich nämlcih die Größe der Inzidenzliste:
Code:
inzidenzliste = new int*[2*anzahlbinvar];
for(i=0; i<2*anzahlbinvar; i++)
{
inzidenzliste[i] = new int[zaehler[i]];
for (j=0; j<zaehler[i]; j++)
{
inzidenzliste[i][j] = 0;
}
}

Später (s.u.) wird dann mit "anzahlklaus" auf Indizes zugegriffen, die "inzidenzliste " nicht hat (zaehler kann ich nicht mehr benutzen, weil runtergezählt; "anzahlklaus" hat an den entsprechenden Stellen einen höheren Wert (+1) als "zaehler"):
Code:
//Klauseln mit x als gestrichen markieren
for(i=0; i < anzahlklaus[-x-1+anzahlbinvar]; i++)
{
	mark[inzidenzliste[-x-1+anzahlbinvar][i]]= 1;
}
 
moin


Wenn ich das Programm in "zusammenarbeit" mit dem Dubugger starte bricht der Debugger das Programm an der Stelle ab.
Wenn ich die Datei für sich alleine starte wird kein Fehler gemeldet.


mfg
umbrasaxum
 
Aha! War bei mir nicht so... Habe inzwischen die Doppeltbesetzung der Arrays "zaehler" und "anzahlklaus" aus dem Code gelöscht (in TransSat) und nur "anzahlklaus" besetzt (waren die richtigen Werte- warum auch immer...) und danach dessen Inhalt nach "zaehler" kopiert. Dann ist dieser Fehler mit "inzidenzliste" behoben, aber sonst alles beim Alten... (s.#11)

Langsam verzweifle ich...
Danke trotzdem!
 
Bei mir gab es nach den Deklarationen keinen Fehler mehr. Du hast diese Deklarationen auch noch in den For Schleifen in Trans2Sat verwendet, es wäre besser wenn du diese direkt am Funktionsanfang deklarierst, das löst dann vielleicht auch schon wieder einen Fehler (zB Speicherplatznutzung wird verringert)
 
Läufts bei Dir jetzt ganz ohne Fehler? Habe die Deklarationen jetzt an den Funktionsanfang gestellt, aber das Problem besteht immer noch. Habe nochmal meine aktuelle Version von basicshn2 angehängt- habe ich noch was übersehen?
 

Anhänge

  • basicshn2.zip
    3,3 KB · Aufrufe: 13
Zurück