重複の可能性:
C++ でメモリ リークをチェックする最良の方法は何ですか?
私はCで二重リンクリストを書いていますが、そのほとんどが実装され、機能しています(トラバースと解放のいくつかの小さな論理エラーを修正するだけで済みます)。
質問: 割り当てたすべてのメモリを確実に解放するにはどうすればよいですか? また、割り当てを最適化するためのテクニックがあるかどうかも知りたいです。それがどのように機能するか、またはチュートリアルへのリンクに関するヒントやヒントも高く評価されます.
私はほとんど初心者なので、コーディング手法を修正するための他のヒントをいただければ幸いです。gdbを使用してデバッグし、Archbang Linux x86_64 で実行しています。
ご協力ありがとうございました。
双方向リンクリストの構造は次のとおりです。
typedef struct node_element{
double data;
} element;
typedef struct node_t{
struct node_t *prev;
struct node_t *next;
struct node_element element;
} node;
typedef struct list_t{
struct node_t *head;
struct node_t *tail;
} list;
これは私がリストを作成する方法です:
list *createList(){
list *temp = malloc(sizeof(list));
temp->head = malloc(sizeof(node));
temp->tail = malloc(sizeof(node));
temp->head->prev = NULL;
temp->head->next = temp->tail;
temp->tail->prev = temp->head;
temp->tail->next = NULL;
return temp;
}
新しいノード:
node *newNode(element * element){
node *current = malloc(sizeof(node));
current->element.data = element->data;
return current;
}
個々のノードを削除します。私の質問にはあまり関係ありませんが、役立つ場合があります。
node *removeNode(list * list, node * current){
if (current->prev == NULL)
list->head = current->next;
else
current->prev->next = current->next;
if (current->next == NULL)
list->tail = current->prev;
else
current->next->prev = current->prev;
free(current);
return NULL;
}
ここで重要なのは、リストの作成が完了したら、次の関数を呼び出すことです。
list *removeList(list * list){
node *temp; //Revised.
//node *temp = malloc(sizeof(node));
while (list->head != NULL){
temp = list->head->next;
free(list->head);
list->head = temp;
}
return NULL;
}
そのようです:
a_list = removeList(a_list);