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

zecapistolas

Dúvida no malloc()

11 mensagens neste tópico

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  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se alocares

Só ?!

cumps ;)

Podes também fazer realloc que te permite alterar o tamanho do array.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!!

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