2014-07-02 78 views
0

我一直在尋找這個論壇幾個小時試圖找到我的問題的答案,閱讀手冊頁,似乎無法看到我在做什麼錯。分配的內存沒有把它分配的價值

這就是發生了什麼事。如果兩個對象之間的距離足夠小,我有一個循環並添加條目到(圖)鄰接矩陣的程序。如果它們不足以添加到鄰接矩陣中,如果它們不太大,則應該將該條目的座標添加到名爲「possible_edgelist」的座標對列表中。

我的問題是「possible_edgelist」不採取我賦予它的值(我和j到它的條目0和1)。不過,任務兩邊的兩個命令正在執行。我將粘貼代碼後,一些輸出例如:

uncertain_edge_max = 4; 
certain_edge_max = 3.2; 


printmatrix(shelldistmtx, shellsize, shellsize); //this is being generated correctly. 

max_num_of_edges = shellsize*(shellsize-1)/2; 

possible_edgelist=(int**)malloc(max_num_of_edges* sizeof(int*)); 
for(i=0; i<max_num_of_edges; i++) 
{ 
    possible_edgelist[i] = (int*)malloc(2 * sizeof(int)); 
} 

poss_edge_num = 0; 

for(i=0; i<shellsize; i++) 
{ 
    adjacency_matrix[i][i]=0; 
    for(j=i+1; j<shellsize; j++) 
    { 
     if (shelldistmtx[i][j]<=certain_edge_max) { 

      adjacency_matrix[i][j]= 1; 
      adjacency_matrix[j][i]= 1; 
     } 
     else 
     { 
      if(shelldistmtx[i][j] <= uncertain_edge_max) 
      { 
       printf("%d \t %d \t %d \t %lf \n", poss_edge_num, i, j, shelldistmtx[i][j]); 
       // ^this is being executed 


       //*****THESE TWO LINES ARE NOT BEING EXECUTED???********* 
       possible_edgelist[poss_edge_num][0]=i; 
       possible_edgelist[poss_edge_num][1]=j; 
       poss_edge_num=poss_edge_num + 1; //this is being executed 

      } 
      adjacency_matrix[i][j] = 0; 
      adjacency_matrix[j][i] = 0; 
     } 
    } 
    adjacency_matrix[i][shellsize] = 1; 
    adjacency_matrix[shellsize][i] = 1; 
} 


//troubleshooting output 

for (i=0; i<poss_edge_num; i++) 
{ 
    printf("%d, %d \n", possible_edgelist[poss_edge_num][0], possible_edgelist[poss_edge_num][1]); //this outputs zeros and bizarre numbers. 
} 

現在,對於輸出我得到:

0.000000 3.535534 3.535534 4.960403 4.960403  
3.535534 0.000000 5.000000 3.715589 3.715589  
3.535534 5.000000 0.000000 3.715589 3.715589  
4.960403 3.715589 3.715589 0.000000 3.400000  
4.960403 3.715589 3.715589 3.400000 0.000000  
0 0 1 3.535534 
1 0 2 3.535534 
2 1 3 3.715589 
3 1 4 3.715589 
4 2 3 3.715589 
5 2 4 3.715589 
6 3 4 3.400000 
0, -1073741824 
0, -1073741824 
0, -1073741824 
0, -1073741824 
0, -1073741824 
0, -1073741824 
0, -1073741824 

最後一組值應爲(0,1),(0,2 ),(1,3)等等。我不知道爲什麼值不能正確賦值,有人可以解釋一下這裏發生了什麼嗎?

我能想到的唯一方法就是這種情況發生在快速連續多次調用的函數中,但我一直保證在返回之前釋放()每個函數調用時改變的所有內容(而不會改變的東西在函數之外被分配/釋放)。

哦,是的,我也試過calloc()。同樣的問題,除了全0。

幫助!

+0

嗯,你通過在調試器的代碼臺階?沒有一些條件語句,代碼不會「不執行」。 – OldProgrammer

+0

我不確定如何在終端中使用gcc來做到這一點?也沒有編譯警告。 –

+0

閱讀關於gdb – OldProgrammer

回答

1

您的打印FORL循環有錯誤:

for (i=0; i<poss_edge_num; i++) 
{ 
    printf("%d, %d \n", possible_edgelist[i][0], possible_edgelist[i][1]); 
}