2016-05-06 7 views
0

デストラクタや割り当てられたメモリの解放に問題があるようです。 ここに私の単純なコードです:クラスへのポインタの無効な無効化

void* Init(){ 
    try { 
     Facebook* DS = new Facebook(); 
     return (void*)DS; 
    } catch(std::bad_alloc&) { 
     return NULL; 
    } 
} 

、ここでは、この機能によって割り当てられたメモリを解放する機能です:

void Quit(void** DS){ 
    delete (Facebook*)DS; 
    *DS = NULL; 
    return; 
} 

イムは、単にこれらの2つの機能が無効でのラインで削除取得イムだけ呼び出す場合は、削除し、新しいものによって割り当てられたメモリが失われました。あなたはFacebookオブジェクトを削除していない

class Facebook { 
    private: 
    List<Troll*> trollsList; 
    AVLTree<PostByLikes> likesTree; 
    AVLTree<PostById> idTree; 
    int maxPost; 
} 

と、このクラスのコンストラクタで行われて何の割り当てメモリはありません...

+0

を試してみてください[RAII](http://stackoverflow.com/questions/2321511/what-is-meant-byをご覧ください-resource-acquisition-is-initialization-raii)と同様のコードを省いてください。 – OMGtechy

+0

'Quit'はデストラクタに置き換えてください。 – erip

+0

[OT]: 'Init()'は 'return new(std :: no_throw)Facebook();'に単純化できます。 – Jarod42

答えて

2

:ここ

は、Facebookのクラスです。

これを試してみてください:

void Quit(void** DS) 
{ 
    delete (*DS); 
    *DS = NULL; 
} 
+0

ありがとう!あなたが正しい!私は削除しました(Facebook *)(* DS)それは働いた! –

+0

@OmriShn:あなたの問題が解決したら、答えを受け入れてください。ありがとう –

1

この

void Quit(void** DS){ 
    Facebook* pDS = (Facebook*)(*DS); 
    delete pDS; 
    *DS = NULL; 
    return; 
} 
関連する問題