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

Gurzi

Erro

15 mensagens neste tópico

Todos os tutoriais explicam desta forma mas eu recebo este erro :

8 C:\Documents and Settings\Administrator\My Documents\teste.cpp invalid conversion from `void*' to `int*'

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

int main(void)
{
  int *ip;
  
  ip = malloc(5 * sizeof(int));
}     

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso é um erro ou um warning?

o malloc devolve um void*, mas ip é do tipo int*.

para não haver problemas, basta fazeres um casting:

ip = (int*)malloc(5 * sizeof(int));

de qualquer forma, isso deve ser apenas um warning, que não vai afectar o funcionamento do programa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não consigo perceber isso. Estou a usar o Dev c++ mas ele não diz.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso é um erro ou um warning?

o malloc devolve um void*, mas ip é do tipo int*.

para não haver problemas, basta fazeres um casting:

ip = (int*)malloc(5 * sizeof(int));

Porque fazes o cast com o  * lá dentro ??

Estou sem fazer nada e pusme a relembrar C.

Mas ponteiros não é fácil :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Falta-te também um return no final do main.

estou a usar void portanto não preciso de return :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se fizesses o casting só com int, ias dizer que o valor era um inteiro, mas o que tu queres é que seja um apontador para um inteiro.

ao declarar a variável também não usaste um *?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Falta-te também um return no final do main.

estou a usar void portanto não preciso de return :D

Estás a usar void como argumento e não como tipo de retorno.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Falta-te também um return no final do main.

estou a usar void portanto não preciso de return :D

aí é que te enganas... int main(void).

ENtão porque é que ele funciona ? devia ser fatal error :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Falta-te também um return no final do main.

estou a usar void portanto não preciso de return :D

aí é que te enganas... int main(void).

ENtão porque é que ele funciona ? devia ser fatal error :)

Como é que ele funciona não sei, mas compilado com o gcc ele não funfa sem return, e além disso nem faz sentido tu pores um tipo de retorno e não retornares nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como é que ele funciona não sei, mas compilado com o gcc ele não funfa sem return, e além disso nem faz sentido tu pores um tipo de retorno e não retornares nada.

não só funciona, como nem dá warning (a menos que uses a opção -Wall, onde passa a dar um warning, mas continua a funcionar). mas concordo que não faz sentido...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como é que ele funciona não sei, mas compilado com o gcc ele não funfa sem return, e além disso nem faz sentido tu pores um tipo de retorno e não retornares nada.

não só funciona, como nem dá warning (a menos que uses a opção -Wall, onde passa a dar um warning, mas continua a funcionar). mas concordo que não faz sentido...

Yup tens razão funciona, mas de qualquer forma não está correcto, mas adiante. Como não uso o Dev C++ a minha ajuda fica por aqui :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fiz aqui um teste engraçado

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

int main(void)
{
   int x= 0, y = 5, *ip = &y;
   
   x = *ip;
   
   *ip = 6;
   
   printf("%d -- %d",*ip,y);
   getchar();
   
   
   
}     

Reparem que o ip está a apontar para a referencia de y.

Mas se eu mudar o ip ele tb muda o y ?

Pensava que era o contrário..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o ip tem o endereço do y.

quando fazes *ip=... estás a dizer para alterar o que está no endereço indicado pelo ip.

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