我已经 6 年多没用过 C 或 C++ 了,有点生疏了。我正在为图形遍历算法编写一些快速测试代码。该代码接受邻接列表样式输入。但是我遇到了free
/的一些问题malloc
。
我的代码有两个问题:
当我在没有
free
和没有代码的情况下运行代码getchar
时,当我使用 VC++ cntrl-f5 时,代码会挂起。这在我使用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();
}