• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Margas

Excesso de variaveis?

4 mensagens neste tópico

Boa noite.

Ao correr esta função, ouço um sinal sonoro e uma pequena janela reportando um erro relacionado com "address"

void transfer(void){
int ct_origem=0,ct_destino=0;
int i_origem,i_destino,indice2,indice3;
float valor_transfer=0;

printf("Insira o numero de cartao de origem\n");
fflush(stdin);
scanf("%d",ct_origem);
printf("Insira o numero de cartao de destino\n");
fflush(stdin);
scanf("%d",ct_destino);

i_origem=ct_origem-1;
i_destino=ct_destino-1;

printf("Qual o valor a transferir");scanf("%f",valor_transfer);

	if(cartoes[i_origem].saldo2>=valor_transfer){
			for(int pos=0;pos<10;pos++)//Este ciclo coloca os valores no array transacao[]
		     {
			      if(cartoes[i_origem].transacao[pos].montante==0)
				{
					indice2=pos;
					break;
			    }
	         }
		cartoes[i_origem].saldo2=cartoes[i_origem].saldo2-valor_transfer;
            cartoes[i_origem].transacao[indice2].montante=valor_transfer;

		for(int pos2=0;pos2<10;pos2++)//Este ciclo coloca os valores no array transacao[]
		     {
			      if(cartoes[i_destino].transacao[pos2].montante==0)
				{
					indice3=pos2;
					break;
			    }
	         }
		cartoes[i_destino].saldo2=cartoes[i_destino].saldo2-valor_transfer;
            cartoes[i_destino].transacao[indice3].montante=valor_transfer;

     		}

	else
		printf("Saldo insuficiente");
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Os scanfs

scanf("%d",ct_origem);
(...)
scanf("%d",ct_destino);

têm que ter como parâmetro o endereço das variáveis onde queres colocar o valor:

scanf("%d",&ct_origem);
(...)
scanf("%d",&ct_destino);

Da maneira que tens, estás a tentar escrever no endereço de memória 0, que é o valor com que inicializaste as variáveis, o que resulta numa operação ilegal.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok.

Depois de tantas horas o óbvio já não se vê.

Mas no entando depois de inserir o valor, tenho o mesmo erro.

void transfer(void){
int ct_origem=0,ct_destino=0;
int i_origem,i_destino,indice2,indice3;
float valor_transfer=0;

printf("Insira o numero de cartao de origem\n");
fflush(stdin);
scanf("%d",&ct_origem);
i_origem=ct_origem-1;
printf("Insira o numero de cartao de destino\n");
fflush(stdin);
scanf("%d",&ct_destino);
i_destino=ct_destino-1;



printf("Qual o valor a transferir\n");
scanf("%f",&valor_transfer);

	if(cartoes[i_origem].saldo2>=valor_transfer){
			for(int pos=0;pos<10;pos++)//Este ciclo coloca os valores no array transacao[]
		     {
			      if(cartoes[i_origem].transacao[pos].montante==0)
				{
					indice2=pos;
					break;
			    }

		cartoes[i_origem].saldo2=cartoes[i_origem].saldo2-valor_transfer;
            cartoes[i_origem].transacao[indice2].montante=valor_transfer;
	    }
		for(int pos2=0;pos2<10;pos2++)//Este ciclo coloca os valores no array transacao[]
		     {
			      if(cartoes[i_destino].transacao[pos2].montante==0)
				{
					indice3=pos2;
					break;
			    }

		cartoes[i_destino].saldo2=cartoes[i_destino].saldo2-valor_transfer;
            cartoes[i_destino].transacao[indice3].montante=valor_transfer;
			}
     		}

	else
		printf("Saldo insuficiente");
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu diria que estás a aceder a uma posição de memória fora do array cartoes[] ou transacao[].

Mas se calhar ajudava meteres exactamente qual é o erro. E já agora o resto do código...  o erro pode vir de trás.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora