ich soll ein Programm schreiben, das die Länge einer Kettenlinie mit m Punkten und n Dimensionen berechnet. m und n werden eingegeben, die Speicherverwaltung der Struktur soll dynamisch sein.
Mein Programm stürzt aber leider immer wieder ab, ich schätze, ich mache was mit der Speicherverwaltung falsch. hat einer von euch eine idee?
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double *ptr;
struct point { //Struktur point mit dynamischer Anzahl von double-Werten
    double* ptr;
};
struct point *p; //dynamische Anzahl an Punkten p aus struct point
double abstand (struct point* p , int n, int m) {
    double d [m-1]; //array zum Speichern der jeweiligen Abstände zwischen je             zwei Punkten
    double D = 0, summe = 0; //D = späteres Ergebnis, Quadratwurzel aus der Summe des obigen arrays
    int abst = 0, dim = 0, j = 0;
    for (;abst < m-1; abst++) { //solange abst kleiner als die Anzahl der Abstände
        for (dim = 0; dim < n; dim++) {
           summe = summe + (p[abst+1].ptr [dim] - p[abst].ptr [dim]) *  (p[abst+1].ptr [dim] - p[abst].ptr [dim]);
       } //wird der Hilfsvariable summe der Wert der alten Summe + der Differenz  des Quadrates der derzeitigen Koordinate zweier Punkte zugewiesen
    d [abst] = summe; //abschließend wird diese summe in einem array-Element    gespeichert und 0 gesetzt
    summe = 0;
   }
   for (j = 0; j < m-1; j++) {
      D = D + d[j]; //solange noch ein Abstand vorhanden, werden diese alle aufaddiert
   }
   D = sqrt (D); //abschließend wird die Quadratwurzel daraus gezogen
   return D; //und das Ergebnis zurückgegeben
}
int main () {
    int n = 0, m = 0, i = 0, k=0;
    char c = 'j';
    printf ("Berechnung Laenge D einer Kettenlinie zwischen m Punkten im n- dimensionalen Raum\n\n");
   while (c== 'j') {
      printf ("n = ");
      fflush (stdin);
      scanf ("%d", &n); //Einlesen der Dimension
      ptr = (double*) malloc (n*(sizeof(double))); //Reservieren Speicherplatz für die n Dimensionen
     printf ("m = ");
     fflush (stdin);
     scanf ("%d", &m); //Einlesen Anzahl Punkte
     p = (struct point*) malloc (m * (sizeof(struct point))); //Reservieren des   Speicherplatzes für die m Punkte
     for (; k<m; k++) { //solange k kleiner ist als die Anzahl der Punkte
        printf ("p%d", k); //Wird dem punkt p k
        printf ("\n");
        for (i=0; i < n; i++) { // solange i kleiner als die Dimension ist
            printf ("%d. Koordinate: ", i+1); //jeweilige Koordinate
            fflush (stdin);
            scanf ("%lf", &p[k].ptr[i]); //der Koordinate i des Punktes k wird ein Wert zugewiesen
            printf ("\n");
        }
      }
    k = 0; //Rücksetzen von k
    printf ("Abstand: %lf", abstand (p, n, m)); //Berechung Abstand zwischen den  Punkten in abstand
    printf ("\n\n");
    free (ptr); //Freigabe Speicherplatz
    free (p);
    printf ("\n\nNochmal? (j/n)");
    fflush (stdin);
    scanf ("%c", &c);
    }
}



