Announcement

Collapse
No announcement yet.

Memory leak?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Memory leak?

    Hallo zusammen.

    ich hab ein Programm geschrieben, welches mir mittels eines Bubblesorts Zahlen welche durch einen Benutzer eingegeben werden sortieren soll.

    Grundsätzlich funktioniert es wunderbar, nur wenn mehrere Zahlen eingibt hängt sich das Programm auf und bricht ab.

    Hier der Code ( C++):

    Code:
    #include <iostream>
    using namespace std;
    
    
    int main () {
        // definiert einen Pointer (double) und einen int zur Eingabe der Anzahl Zahlen
        double *p;
        int n;
    
        // Eingabe der Anzahl Zahlen
        cout<<"Bitte geben Sie die Anzahl Zahlen ein, die Sie sortieren moechten!"<<endl;
        cin >> n;
    
        cout <<"Geben Sie die Zahlen ein, die Sie sortieren moechten" << endl;
        // Anforderung des neuen Speicherplatzes (und Speicherung!!!)
        p=new double (n);
    
        // Eingabe der einzelnen zu sortierenden Zahlen in den neu zugeteilten Speicherplatz
        for (int i=0;i<n;i++) {
            cin>>p[i];
    
        }
        // Ausgabe der gespeicherten Zahlen zur Kontrolle
        for(int i=0;i<n;i++){
            cout<<p[i]<<" ";
        }
        cout << endl;
    
        // Hilfsvariabel zum sortieren
        double c;
    
        // Sortiervorgang der eingegebenen Werten
        for (int k=n-1;k>0;k--){
            for (int j=0; j<k;j++) {
                if(*(p+j)>*(p+j+1)){
                    c = *(p+j);
                    *(p+j) = *(p+j+1);
                    *(p+j+1) = c;
                    }
            }
            }
        // Ausgabe der sortierten Werte
        for (int h=0; h<n;h++) {
        cout << *(p+h) << " ";
        }
        cout << endl ;
     return (0);
    Könnte es sein, dass ein memory leak auftritt, weil ich das new nicht lösche?
    Wenn ja wo darf ich die Variabel p löschen?

    Vielen Dank.

    Gruss Splash

  • #2
    p=new double [n];

    Das Löschen des Arrays sollte vor dem return erfolgen.

    delete[]p;
    Christian

    Comment


    • #3
      Ist schon länger her, dass ich dieses Pointergewurschtel gemacht habe. Bei diesen für mich komischen Dereferenzierungen hätte ich jedenfalls Bauchschmerzen.

      Originally posted by Splash View Post
      Code:
                      *(p+j) = *(p+j+1);
      Gegenfrage: Ist immer gewährleistet, dass ein *(p+j) auf den Speicherbereich von p[j] zeigt?

      Ich bin nur ein Mensch und kein Compiler und habe auch die aktuelle C(++)-Spec nicht im Kopf, und den K&R habe ich zuletzt vor 20 Jahren gelesen, daher möge man mir verzeihen, wenn ich für mich selbst die Frage mit einem klaren "Nein" beantworte.
      Dirk

      Comment


      • #4
        herzlichen dank für die Antworten... tatsächlich funktioniert das Programm viel besser wenn man p = new double [] als Array definiert und nicht irgendwie als irgendein Funktionengewurstel

        Er soll ja auch nicht immer auf den gleichen Speicherbereich zeigen(wenn ich deine Gegenfrage richtig verstanden habe). ich will mit dieser Schleife ja immer auf den nächsten Speicherbereich zeigen als p+j. Aber eine gewisse Abhängigkeit ist natürlich vorhanden.

        cheers

        Comment

        Working...
        X