Malloc没有在函数中工作

时间:2014-03-02 10:06:19

标签: c function malloc

malloc没有分配函数中请求的内存。我试过搜索另一个与malloc相关的问题/谷歌,我认为我写的内容应该起作用。 编辑:~~~~是填充码,真的不应该与问题相关= d

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>

    typedef struct {

            int x;
            int y;        

    } Coordenada;

    int calculaCaminho(~~~~~Coordenada **posicoes) {
            int tam = 5;
    ~~~~

            *posicoes = (Coordenada*)malloc(tam*sizeof(Coordenada));

            //I can't access posicoes[k]->y or posicoes[k]->x for whatever value of k that was in the  
            //range of tam
    ~~~~


    return(~~~~);

    }
    main() {
    ~~~~      
            Coordenada *posicoes;
            npassos = calculaCaminho(~~~~, &posicoes);
    ~~~~
    }

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

*posicoes = (Coordenada*)malloc(tam*sizeof(Coordenada));

之后,您可以访问(*posicoes)[k].x,但不能访问posicoes[k]->x。如果您暂时使用临时指针,您会立即注意到它:

Coordenada * ptr = (Coordenada*) malloc(tam*sizeof(Coordenada));

*posicoes        = ptr;
ptr[k].x         = 1; // ok
(*posicoes)[k].y = 2; // ok, same as ptr[k].y = 2;

// posicoes[k]->x = 0; // NOT ok

答案 1 :(得分:0)

  

//无法访问posicoes [k] - &gt; y或posicoes [k] - &gt; x   在中的k               //范围tam

您应该按如下方式访问它们:

  posicoes[0][k].y ....

  (*posicoes)[k].y ....

(*posicoes)posicoes[0]将允许您访问已分配内存的第一个元素。之后,您可以通过索引相对于第一个元素访问元素..

答案 2 :(得分:0)

您可以访问此处提到的xy ..

*posicoes = (Coordenada*)malloc(tam*sizeof(Coordenada));
for(int k = 0 ; k < tam ; k++)
{
    (*posicoes)[k].x = k;
    (*posicoes)[k].y = 10*k;
}

也可以在main中访问,例如:

for(int k = 0 ; k < 5 ; k++)
{               
    //print ..  posicoes[k].x 
    //print ..  posicoes[k].y 
}