我6年多沒用過C或C++,有點生疏。我正在爲圖遍歷算法編寫一些快速測試代碼。該代碼接受一個鄰接列表樣式輸入。不過,我遇到了free
/malloc
的一些問題。另一個malloc/free的難題
有兩個問題我的代碼:
當我運行沒有
free
和沒有getchar
的代碼,當我使用VC++ CNTRL-F5的代碼掛起。這可以在我使用getchar()
時得到解決。有誰知道爲什麼?當我用free運行代碼時,代碼會掛起。我試圖調試代碼,它完全掛在
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();
}
你是不是也檢查了很多其他的內存分配,你必須一直做下去,當你調用** initialize_graph喜歡**。 – 2012-04-06 05:51:04