私は6年以上CまたはC++を使用しておらず、少し錆びています。グラフ走査アルゴリズムの簡単なテストコードを書いています。このコードは、隣接リストスタイルの入力を受け入れます。ただし、free
/でいくつかの問題が発生していますmalloc
。
私のコードには2つの問題があります。
VC ++ cntrl-f5を使用する
free
と、コードなしでコードを実行すると、コードがハングします。getchar
これは、を使用すると改善されますgetchar()
。誰かが理由を知っていますか?無料でコードを実行すると、コードがハングします。コードをデバッグしようとしましたが、
free
ステートメントで正確にハングします。これを修正する方法について何か提案はありますか?
また、このコードで何か危険なことをしている場合はお知らせください。ヘッダーファイルは省略されています。
void * s_malloc(size_t size){
void * ret_pntr = malloc(sizeof(size));
if (ret_pntr == NULL){
printf ("error");
exit(1);
}
return (void *)malloc(sizeof(size));
}
void initialize_graph(graph * G1, int num_vertices){
int i = 0 ;
G1->num_vertices = num_vertices;
G1->node_list = (node**)s_malloc(sizeof(node*)*num_vertices);
for (i = 0; i < num_vertices; i ++){
G1->node_list[i] = (node *)s_malloc(sizeof(node));
}
}
void free_everything(graph * G1){
int i = 0;
node * ref = NULL;
for (i = 0; i < G1->num_vertices; i++){
ref = G1->node_list[i];
recursive_remove(ref);
}
free(G1->node_list);
}
void recursive_remove(node * ref){
if (ref == NULL){
return;
}
else{
recursive_remove(ref->next);
}
free(ref);
}
int main(){
int i = 0;
graph * G1 = (graph*)s_malloc(sizeof(graph));
G1->init = &initialize_graph;
G1->init(G1, 10);
G1->remove = &free_everything;
G1->node_list[0]->value = 1;
G1->node_list[0]->next = (node*)s_malloc(sizeof(node));
G1->node_list[0]->next->value = 2;
G1->node_list[0]->next->next = NULL;
G1->node_list[1]->value = 10;
printf("%d\n", G1->node_list[0]->next->value);
printf("%d\n", G1->node_list[1]->value);
G1->remove(G1);
free(G1);
getchar();
}