Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Dúvida básica de ponteiros


viniciusams

Pergunta

Galera, sou completamente iniciante em c

implementei um código e este não funciona. Declaro um ponteiro que será um vetor, não seto o tamanho. Passo ele como parametro para outra função.

Nesta outra função eu aloco espaço e seto os valores neste vetor. O método origem exibe os valores do vetor.

Poderiam me ajudar a apontar o erro?

int main(int argc, char** argv) {
    U16 id, i;
    conexaoinfo_t info;
    teste_t teste, *testeFinalList;
    ...
    
   select(idconn, &teste, testeFinalList)
   for (i = 0; i < sizeof (testeFinalList); i++) {
         printf("code[%d]= %d\n", i, testeFinalList[i].cod);
         printf("name[%d]= %s\n", i, testeFinalList[i].nome);
   }
}

select(U16 id, teste_t *teste, teste_t *testeFinalList){
    testeFinalList= (teste_t *) malloc(lines * sizeof (teste_t));
    for (i =0 ...){
         testeFinalList[i].code = c;
         strcpy(testeFinalList[i].name, name);
     }
}

Bom, cortei o código justamente para ficar mais fácil de entender o problema. Não consigo passar o parâmetro carrierFinalList e obter o resultado esperado.

Desde já agradeço

Editado por viniciusams
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Você tá passando apenas o valor da variavel ponteiro como parametro (que nesse caso, é nulo, ou nada, sei lá), mas a função select faz uma copia dela, então você perde a referencia.

Pra isso que você quer fazer, vai precisar passar o endereço da variavel.

//main

select(idconn, &teste, &testeFinalList);

//select

select(U16 id, teste_t *teste, teste_t **testeFinalList)

Link para o comentário
Compartilhar em outros sites

  • 0

cara antes de tudo obrigado pela resposta

mas alterei conforme você me falou e não tenho a resposta esperada.

code[0]= 0

name[0]= oþ·X©þ·

code[1]= 2052

name[1]= p8HP¿

code[2]= 2052

name[2]= (0¿

code[3]= 2052

name[3]= h¿

no final da função select eu mandei imprimir o vetor e este está com os valores corretos

Link para o comentário
Compartilhar em outros sites

  • 0

Ah, esqueci de dizer que fazendo o que eu disse, na função select você vai usar:

*testeFinalList

em vez de

testeFinalList

Porque testeFinalList vai receber o endereço do ponteiro.

E *testeFinalList vai acessar esse ponteiro.

Resumindo: o *testeFinalList da função select vai equivaler ao testeFinalList do main.

Se no main você faria: testeFinalList = malloc ...

No select você faz: *testeFinalList = malloc...

E o resultado é o mesmo. Como se a variavel estivesse espelhada.

Só tenha cuidado pra não perder a referencia da variável.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...