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

Vetor não muda quando passado por referência


Zkizo

Pergunta

Eu estou mandando um vetor para a função realoqueDispositivo. Lá dentro está tido ok, mas quando eu volto para getRamo dá erro de memória nesse peque teste que eu fiz pedido para imprimir a corrente "ramo.getCorrente". Lembrando que ramo está declarado como Dispositivo *ramo[4];

void Malha::realoqueDispositivo(Dispositivo *p, int tipo){

        //pegar modelo de realoque em documentos recebidos

    switch (tipo) {
               case 1:
                     p = new Diodo;
                     p->setCorrente(1);
                     p->setCorrente(1);
                     break;
               case 2:
                     p = new Resistor;
                     p->setCorrente(2);
                     break;
               case 3:
                     p = new Indutor;
                     p->setCorrente(3);
                     break;                   
               case 4:
                     p = new Capacitor;
                     p->setCorrente(4);
                     break;
               case 5:
                     p = new FonteDeCorrente;
                     p->setCorrente(5);
                     break;                     
               case 6:
                     p = new FonteDeTensao;
                     p->setCorrente(6);
                     break;                   
                     }

}


void Malha::getRamo(int a, int b, int cont){

     int aux;

     cout<<endl<<"Dispositivos do ponto "<<a<<" ao ponto "<<b<<endl;
     for ( int i = 0; i < 4; i++){
            cout<<endl<<"\tDigite o numero referente ao dispositivo desejado:"<<endl;
            cin>>aux;
             realoqueDispositivo(ramo[i], aux); 
             ramo[i]->setCorrente(1);
             ramo[i]->setCorrente(1);    
     }
}

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

1 resposta a esta questão

Posts Recomendados

  • 0

hum se você declarar o parametro p como Dispositivo*, na hora q o parametro ramo for passado, p vai apontar pra mesma regiao de memoria q ramo, mas sera ainda uma variavel diferente. ou seja, dois ponteiros distintos apontando pro mesmo espaco.

quando você chama o new para o p, ele aloca um novo espaco e aponta o p para la. mas o ramo continua apontando o mesmo espaco anterior.

entenda q no caso você quer passar um ponteiro e quer q ele proprio seja alterado dentro da funcao. sendo assim, o parametro deveria ser um ponteiro de ponteiro.

então, declare p como Dispositivo**. na hora de passar o parametro, faca:

realoqueDispositivo(&ramo[i], aux);
e pra acessar o endereco, faca:
*p = new Diodo;
(*p)->setCorrente(1);
(*p)->setCorrente(1);[/code]

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...