私は、ユーザーから与えられたバイト数を割り当て、割り当てられたメモリを解放する別の関数がある関数を使用しています。メモリセグメントは、xの等しいサイズのリストノードを含むプールとして機能します。以前のmallocを解放しようとしたときにエラーが発生しました
初期関数:
void create_mem(int mem_size, int num_n){
number_of_nodes = num_n;
mem_block = malloc(mem_size);
header = mem_block;
}
ヘッダファイルnumber_of_nodes、intとしてヘッダとmem_block、list_node *及びチャー*をそれぞれ有しています。
私もヘッダファイルにlist_node構造を有する:
typedef struct list_node {
list_node* next;
}list_node;
削除機能:
void delete_mem(){
free(mem_block);
}
をリストの作品と私のコードは正常に動作insert_nodesとdelete_nodesが含まれていますが、いつでも私のメインプログラムは私のプログラムがクラッシュするdelete_mem関数を呼び出します。私はdelete_mem機能を変更
:
void delete_mem(){
mem_block = NULL;
free(mem_block);
}
私はエラーを取得していないが、私は、この削除機能は、実際に私はそれが何をしたいのかいないと思います。
メモリを解放しようとする前に元のmem_blockの中にあるものはすべて削除する必要があると思いますが、その方法についてはわかりません。
情報が不十分です。 [mcve]を投稿してください。 – kaylum
明らかに、 'mem_block = NULL'を代入すれば、その後の' free() 'は' free(NULL) 'と等しくなり、何もしません。 –
ベスト推測:どこか(else)あなたは 'mem_block'に新しい値を割り当てています。自由にしようとすると、その値はもはや' malloc() 'から受け取った値ではなくなります。 –