Zum Inhalt springen

Hilfe, segmentation fault


dachschatten

Empfohlene Beiträge

Hallo zusammen!

Ich schreibe an einem Programm zur numerischen Lösung partieller DGLen in C. Dieses Programm kompiliert auch ohne zu mucken.

Zum Starten bekommt es dann noch einige Daten per in_File übermittelt, wie zB die Integrationsordnung und die Diskretisierung des Integrationsgebietes.

Mein Problem: Rechne ich auf Diskretisierung A, funktioniert zwar Ordnung 1, bei Ordnung 2 erhalte ich die Meldung "segmentation fault (core dumped)".

Rechne ich auf Diskretisierung B, funktioniert sowohl Ordnung 1 als auch 2.

Die Zeile, in der das Problem auftritt ist eine Speicherallozierung durch malloc (kombinert mit groesse*sizeof(double)), deren Groessenordnung von der Ordnung abhängt. Meiner Meinung nach und auch nach Meinung des Compilers (g++ mit Option -02 -Wall -pedantic) ist die Syntax korrekt.

Als das Problem an anderer Stelle schon einmal auftauchte, hab ich es erst mal umgangen indem ich einfach dem Array eine feste Groesse zuwies. Aber das ist natürlich auf Dauer auch kein Zustand...

Für jede Hilfe und jeden sachdienlichen Hinweis zur Loesung dieses Problems waere ich sehr dankbar.

Liebe Gruesse

dachschatten

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmmm, das sind ein paar tausend Zeilen...

Der Abschnitt indem das Problem konkret auftritt ist

for(i = 0; i < MAX_CONSERVATIVE; i++)

{

fprintf(stderr, "r_f_w, speicherallokation fuer koeff\n");

koeff = (double *)malloc(nr_of_koeff*sizeof(double));

fprintf(stderr, "r_f_w, speicher\n");

if(NULL == koeff)

fatal_error("Not enough memory!");

}

Das erste fprintf wird ausgefuert, das zweite nicht mehr.

Vielleicht kannst Du mir einen Hinweis geben nach welcher Art von Fehler ich suchen sollte.

Sonnige Gruesse (ist es nicht schoen draussen??!!!)

Dachschatten

Link zu diesem Kommentar
Auf anderen Seiten teilen

nr_of_koeff ist die noetige Anzahl von Koeffizienten fuer ein Rekonstruktionspolynom vom Grad Ordnung-1 in 2D, für Ordnung 2 also 3. (Ordnung1 braucht nur 1 Koeffizienten des konstanten Polynoms vom Grad 0). nr_of_koeff wird irgendwo am Anfang von main.c, nach dem Einlesen des in-files, berechnet.

Der Sinn der Funktion, aus der der gepostete Abschnitt stammt, ist es, fuer jede der drei Variablen ein 2D-Polynom zu bestimmen, deren Koeffizienten dann in koeff gespeichert (und spaeter weiterverarbeitet) werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, dass ich mir irgendwo vorher den Heap zuerschiesse glaub ich auch, aber gibt es eine Moeglichkeit, herauszufinden wo, oder ist da Handarbeit gefragt?

Ich war schon nah dran mich einfach mal mit malloc-Einfuegen durch den Programmtext nach oben zu arbeiten aber das ist ne ziemlich unsexy Vorstellung...

Was passiert eigentlich, wenn der Heap voll ist? Dann sollte malloc doch nen NULL-Zeiger zurueckgeben, was ja dann zur Fehlermeldung "not enough memory" fuehren sollte, oder?

Ich verwende uebrigens C, aber aus irgendwelchen Gruenden muss das Ganze als C++ kompiliert werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...