Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

zecapistolas

Dúvida no malloc()

Mensagens Recomendadas

zecapistolas    0
zecapistolas

Boas,

Preciso de ajuda num programa onde quero utilizar o comando malloc.... O objectivo é alocar um array de int's, mas não sei o tamanho que quero!

Como tal devo fazer int *ptr = (int*)malloc(sizeof (int)); certo?! É depois na sua utilização, que tenho algumas dúvidas....

1. Quando declaro o malloc, quanto espaço está verdadeiramente alocado?

2. Quantos elementos posso inserir? Quantos quiser?

3. Se a meio do programa quiser eliminar alguns elementos, como faço?

3. É necessário fazer o free no final do programa?

cumps  ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ferreira    0
Ferreira

Para o malloc precisas de saber o espaço que precisas. É esse o argumento a função malloc. No teu caso é alocada a dimensão de um int.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nata79    0
nata79

se queres alocar um array de inteiros precisas de alocar espaço suficiente para um determinado nº de inteiros que tens de escolher.

para alocar espaço para um array de N inteiros deves fazer:

int * ptr;

ptr = (int *)malloc(sizeof(int) * N);

a utilização é como num array "normal", eliminar elementos é impossivel, podes é definir (se possivel) um valor que represente que a posição está vazia.

não precisas de fazer free no fim do programa, mas é aconselhavel que o faças quando já não precisas do array.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zecapistolas    0
zecapistolas

Então, se para criar Array's e Malloc's preciso de colocar um determinado nº de elementos, que vantagens tenho em utilizar malloc?!  :wallbash:  :hmm:

cumps  ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ferreira    0
Ferreira

A vantagem é poderes usar um array quando não é possível saber em compile-time a dimensão do array (por exemplo, a dimensão pode ser lida do stdin no início do programa).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zecapistolas    0
zecapistolas

A vantagem é poderes usar um array quando não é possível saber em compile-time a dimensão do array (por exemplo, a dimensão pode ser lida do stdin no início do programa).

Só ?!

cumps ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nata79    0
nata79

não esquecer a grande vantagem de alocar espaço dinamicamente:

quando alocas uma variavel local, seja um int ou um array, quando a função termina, o espaço alocado para as variáveis é libertado.

se alocares o espaço dinamicamente, por exemplo com o malloc, esse espaço só é libertado quando o programa termina. portanto ao alocares um array com o malloc numa função qualquer, mesmo depois dessa função terminar, podes aceder e modificar esse mesmo array a partir de outras funções que ainda estejam em execução. pra quem inda está a começar pode não parecer grande coisa, mas quando começares a trabalhar com estruturas de dados mais complexas vais ver que não consegues viver sem o malloc!!

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade