2016-06-15 8 views
1

Die Idee der Funktion besteht darin, die ursprüngliche Liste in X Lists alle in einem einzigen Array ohne zu löschen noch neue Zellen zu erstellen. Die Funktion tun, um seinen Job großartig, aber wenn ich die Lecks mit valgrind oder Dr.-Speicher überprüfen, scheint es einige Leck Probleme zu haben ...Speicherleck mit Listen C++

List* function (List & todivide, int t = 2){ 
    Cell* aux = todivide.l;  // l is the head of the list 
    int tam = (todivide.size()/t == 0) ? todivide.size()/t : todivide.size()/t+1; 
    List* arrayoflists = new List [tam]; 

    for(int i = 0, k = 0; aux != 0; i++){ 
     if(i%t == 0){ 
      arrayoflists[k].l = aux; 
      aux = aux->sig; 
      k++; 
     } 
     if(i%t == t-1){ 
      Cell* p = aux->sig; 
      aux->sig = 0; 
      aux = p; 
     } 
    } 
    l.l = 0; 

    return arrayoflists; 
} 

Ich sehe nichts falsch ... Irgendwelche Ideen?

Vielen Dank im Voraus

+0

Es ist nichts falsch mit dem angezeigten Code. Daher muss das Leck entweder in dem Code sein, der nicht gezeigt wird, oder in Kombination mit dem gezeigten und dem nicht gezeigten Code. Um zu vermeiden, unnötig Zeit mit der Suche nach Speicherlecks zu verschwenden, lernen Sie, wie man 'std :: shared_ptr' verwendet. –

+0

Ich weiß, dass es nicht mit der Hauptfrage zusammenhängt, aber du wolltest nicht schreiben '(todivide.size()% t == 0)'? – StahlRat

Antwort

1

innerhalb der Funktion nichts falsch Es gibt aber da Sie Rückkehr einen Zeiger sind, die Sie neu erstellt mit, könnte vergessen Sie den zurückgegebenen Zeiger zu löschen, wo immer Sie es außerhalb verwenden die Funktion.

+0

Du hast recht, ich habe versucht: "lösche [] ArrayOfflist" nachdem das Array im Haupt erhalten und die Lecks behoben wurden ... Ich verstehe nicht, warum ich das tun muss, in der Tat habe ich den Destruktor deklariert ... – Bechma

+0

Hmm, könnte etwas im Destruktor dann schief gehen. Ich bin froh, dass Sie es behoben haben. – Amposter