Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

Hallo,

MAX_CONSERVATIVE ist die Anzahl der Konservativen Variablen der 2D-Flachwassergleichung, eine Konstante mit Wert 3.

Und koeff wird direkt ueber dem geposteten Abschnitt deklariert als Pointer

double *koeff[MAX_CONSERVATIVE];

Sonnige Gruesse

dachschatten

Geschrieben

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.

Geschrieben
Das erste fprintf wird ausgefuert, das zweite nicht mehr.
Dann vermute ich, dass du dir schon vorher, wahrscheinlich durch eine Bereichsüberschreitung, den Heap zerlegt hast.

Benutzt du eigentlich C oder C++?

Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...