分配的内存不会获取分配的值

时间:2014-07-02 23:33:49

标签: c malloc

我一直在搜索这个论坛几个小时,试图找到我的问题的答案,阅读手册页,似乎看不出我在做什么有什么问题。

这就是发生的事情。如果两个对象之间的距离足够小,我有一个程序循环并向(图)邻接矩阵添加条目。如果它们不够小,不能添加到邻接矩阵中,如果它们不是太大,它应该将条目的坐标添加到坐标对列表中,称为" possible_edgelist。 #34;

我的问题是" possible_edgelist"不会接受我赋予它的值(i和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。

帮助!

1 个答案:

答案 0 :(得分:1)

您的打印循环错误:

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