2016-06-15 10 views
1

この関数の考え方は、Xリストの元のリストをすべて削除したり、新しいセルを作成せずに1つの配列に集めることです。 ...私が間違って何も見えない任意のアイデアを 機能は、彼の仕事は素晴らしいんが、私はvalgrindのまたは博士メモリーでリークをチェックするとき、いくつかのリークの問題を持っているように見えます...リストのメモリリーク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; 
} 

?事前に

おかげ

+0

示されたコードに問題はありません。したがって、リークは、表示されていないコード、または表示されているコードと表示されていないコードのいずれかでなければなりません。無駄にメモリリークを拾う時間を無駄にするのを避けるために、 'std :: shared_ptr'の使い方を学んでください。 –

+0

私は主な質問には関係していませんが、 '(todivide.size()%t == 0)'と書いてみませんでしたか? – StahlRat

答えて

1

あり何も悪いことは、関数の内部でませんが、あなたはあなたが新しい使用して作成されたポインタを返すしているので、あなたは外にそれを使用している今までに返されたポインタを削除し忘れることがあります関数。

+0

あなたは正しく、私はしようとしました: "[arrayoflistを削除した後にメインで配列を受け取り、リークが修正されました...私はなぜこれを行う必要があります理解していない私はデストラクタを宣言しました... – Bechma

+0

ええと、デストラクタで何か問題が起きている可能性があります。あなたがそれを固定して得ることができてうれしい。 – Amposter