1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema com Ponteiros

Discussão em 'Programação' iniciada por te-x, 16 de Outubro de 2012. (Respostas: 5; Visualizações: 590)

  1. te-x

    te-x Power Member

    Olá, estou a fazer um trabalho e numa das funções que fiz tenho um argumento que é um ponteiro, que vai servir como argumento de saída.

    A função é suposto carregar informação do disco, alocá-la em memória e a esse tal argumento de saída é atribuído o valor do endereço em que ficou a informação. Com uns prints espalhados pelo programa consegui ver que está tudo a funcionar bem, o valor é bem atribuido dentro da função mas cá fora o ponteiro fica com o valor 0. Não estou a conseguir perceber porque. Fica aqui o código que me parece relevante:

    Código:
    int main() {
        [...]
    
    
        DataType* pointer;
    
    
        if( (stat = func(n, pointer)) != 0)
            return stat;
    
    
        printf("%d", pointer); //---> imprime 0
    
    
        [...]
    }
    
    
    int func(int n, DataType* p) {
        
        [
            //Load data to memory
        ]
    
    
        p = &loadedMem;
    
    
        printf("%d", p); //imprime bem (134558752)
    
    
        return 0;
    }
    
     
    Última edição: 16 de Outubro de 2012
  2. Esfomeado

    Esfomeado Power Member

    A tua função esta a returnar o valor 0;

    Devias returnar p.
     
  3. te-x

    te-x Power Member

    a funcao é suposto retornar um valor, 0 no caso de tudo correr bem. A p é atribuido o valor do endereço do que eu preciso de aceder fora da função. Ou pelo menos era o suposto.
     
  4. dagas46

    dagas46 Power Member

    Para acederes ao valor de p fora da função tens de fazer return do p. Se não declaras o p como sendo global e aí já consegues aceder a p fora da função e fazer return 0
     
  5. Esfomeado

    Esfomeado Power Member

    O problema é quando chamas a função. Não estas a passar o endereço do apontador (&pointer) e utiliza %p em vez de %d para verificares o endereço que esta em p.
     
  6. te-x

    te-x Power Member

    Já estou a ver. Obrigado ;)

    Ficou assim no final:

    Código:
    int main() {
        [...]
    
        DataType* pointer;
    
        if( (stat = func(n, &pointer)) != 0)
            return stat;
    
        printf("%d", pointer); //---> imprime 0
    
        [...]
    }
    
    int func(int n, DataType** p) {
        
        [
            //Load data to memory
        ]
    
        *p = &loadedMem;
    
        return 0;
    }
    
     

Partilhar esta Página