WinFuture-Forum.de: C++: Numerische Aufgabe (lr-faktorisierung) - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C++: Numerische Aufgabe (lr-faktorisierung) funktioniert nicht (Fehler: Segmentation fault: Core dumped)


#1 Mitglied ist offline   slauf 

  • Gruppe: aktive Mitglieder
  • Beiträge: 46
  • Beigetreten: 04. Juni 05
  • Reputation: 0

geschrieben 19. November 2007 - 02:18

Hallo !
Ich habe hier einen Fehler, den ich nicht verstehe ! Deswegen guckt's Euch mal an und sagt mir bitte den Fehler !!!
Ist für's Studium wichtig !!!

Angehängte Datei  LR_main2.txt (5,25K)
Anzahl der Downloads: 220

Dieser Beitrag wurde von slauf bearbeitet: 19. November 2007 - 12:11

0

Anzeige



#2 Mitglied ist offline   slauf 

  • Gruppe: aktive Mitglieder
  • Beiträge: 46
  • Beigetreten: 04. Juni 05
  • Reputation: 0

  geschrieben 19. November 2007 - 11:48

Also inzwischen weiß ich, dass durch dire Speicherplatzreservierung für die Matrix 'Inverse' irgendwelcher Code im Arbeitsspeicher überschrieben wird. Denn falls ich diese Speicherplatzreservierung auskommentiere, läuft mein Programm zwar problemlos ab, jedoch wird keine Inverse berechnet, welche ich aber für den Beleg brauche.
0

#3 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 19. November 2007 - 14:17

Ganz ehrlich weiß ich nicht was du eigentlich von uns willst.
Du klatscht uns deinen Quellcode hin und schreibst, dass er einen Fehler enthält.

Wie wäre es, wenn du uns deine detaillierte Problembeschreibung aufschreibst?

Was soll dein Problem machen? Was macht es nun?
Wo taucht das Problem auf / bei welcher Methode?
usw...
0

#4 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 19. November 2007 - 15:58

Hi,

ohne das ich deinen Code weiter geprüft habe, sind mir schon zahlreiche Ungereimtheiten aufgefallen.

Du möchtest ein 2-dimensionales Array dynamisch erzeugen. Aber du erzeugt nirgends die Pointer für die erste Dimension. Das müsste schon so aussehen:
//Zeilen für Matrix A reservieren
A = (double **)malloc(N * sizeof(double *));

//Spalten für Matrix A reservieren
for (int i=0; i<N; i++) {
	A[i] = (double *)malloc( N * sizeof(double));
}

//Zeilen für Inverse reservieren
Inverse = (double **)malloc(N * sizeof(double *));

//Spalten für Inverse reservieren
for(int i=0; i<N; i++) {
	Inverse[i] = (double*)malloc(N*sizeof(double));
}

Außerdem solltest du aussagekräftigere Variablennamen verwenden, weil so will und kann ich einiges nicht nachvollziehen. (z.B. l in main()).
Desweiteren solltest du deine Variablen mit einen Wert initialisieren bevor du Operationen wie
prod *= A[i][i];
durchführst. prod kann zu dieser Zeit jeden beliebigen Wert - der zufällig im Speicher steht - haben.

Weiter gibst du in der int-Funktion TestSingulaer einen double Wert zurück. Wenn das Absicht ist, dann mach einfach einen Typecast bei der Rückgabe.

Mehr kann ich nicht sagen, da ich den Code nur kurz überflogen habe. Aber ich hoffe das sind einige Denkanstösse.

Gruß,
Stefan
0

#5 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 19. November 2007 - 20:27

was mir gerade auffällt:
malloc ist C, new ist C++.
Da du in C++ entwickelst und new/delete um einiges schöner ist als malloc/free, würde ich auf jeden Fall das erste vorziehen.

Kleines Beispiel, falls dir das nicht geläufig ist.
double* d = (double *)malloc( N * sizeof(double));
...
free(d);

double** d = new double*[N];
...
delete[] d;

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0