2017-09-11 54 views
-1
typedef struct{ 
    int *sols; 
    int rest; 
    int fitness; 
    int num; 
    struct lista* next; 
}lista; 

lista* gere_lista(lista *solucoes, int *sol, int *grafo, int objs, int rests){ 
    int i; 
    int *nova_sol; 
    lista *temp = solucoes; 
    nova_sol = malloc(sizeof(int)*objs); 
    nova_sol = update_sol(sol, nova_sol, objs); 
    for(i=0; i<objs; i++){ 
     nova_sol = gera_vizinho3(nova_sol, i); 
     temp->sols = malloc(sizeof(int)*objs); 
     temp->sols = update_sol(nova_sol, temp->sols, objs); 
     temp->rest = calcula_restricoes(nova_sol, grafo, objs, rests); 
     temp->fitness = calcula_max(nova_sol, grafo, objs); 
     temp->num = i; 
     temp = temp->next; 
    } 
    return solucoes; 
} 

int* pesquisa_tabu(int sol[], int *grafo, int objs, int rests, int num_iter){ 
    int fitness, fitness_viz, i, memoria[objs*2/8]; 
    lista *solucoes, *temp; 

    solucoes = malloc(sizeof(lista)); 
    temp = solucoes; 

    for(i=1; i<objs; i++){ 
     temp->next = malloc(sizeof(lista)); 
    } 
    temp->next = NULL; 
    solucoes = gere_lista(solucoes, sol, grafo, objs, rests); 
    return sol; 
} 

我正在嘗試爲我的學校作業做一個禁忌搜索算法,但它並不真正起作用。 這段代碼應該創建一個與pesquisa_tabu函數中的對象具有相同鏈接數量的鏈接列表,然後它會在鄰居中生成相同的數字,併爲每個鏈接添加一個鄰居,然後處理所有的信息pesquisa_tabu功能。 ,我不能找到什麼是錯在此代碼,它總是崩潰的第二次迭代...禁忌搜索算法總是在第二次迭代崩潰

+3

您的循環是錯誤的,你只是分配內存以相同的TEMP->未來一遍又一遍,然後將其設置爲null之後 – Tyler

+0

_Questions尋求幫助調試(爲什麼不是這個代碼工作?)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建[mcve] ._ –

回答

-1
for(i=1; i<objs; i++){ 
     temp->next = malloc(sizeof(lista)); 
    } 
    temp->next = NULL; 

你做了什麼分配內存objs一些lista的,失去鏈接所有這些都是因爲你總是讓temp->next指向一個新的內存,然後再指向NULL。你需要維護列表的head,同時爲所有節點分配內存。

lista *solucoes, *temp;//solucoes will act as head of list  
temp = NULL; 
solucoes = NULL; 

for(i=1; i<objs; i++) 
{ 
    if(solucoes==NULL) 
    { 
     temp = malloc(sizeof(lista)); 
     solucoes = temp; 
    } 
    else  
    { 
     temp->next = malloc(sizeof(lista)); 
     temp = temp->next; 
    } 
} 
temp->next = NULL; 
+0

我使用'temp'作爲臨時指針,主指針是'solucoes',即使我使用臨時指針,我是否會丟失所有鏈接? – pedrofranco6

+0

非常感謝:D – pedrofranco6