2014-07-02 50 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]); 
}