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

JoaoNascimento

Malloc

Mensagens Recomendadas

Localhost

Malloc serve para alocar memória dinamicamente. Ou seja, em vez de ser o programa que aloca a memória (quando declaras variáveis normais) e as destrói quando acaba uma função ou o programa tu é que tens controlo sobre as variáveis alocadas dinamicamente.

Estas variáveis vão permanecer na memória até tu as destruires (com a função free) ou até o programa finalizar.

Têm diversas utilidades. Por exemplo, quando queres retornar uma string de uma função que foi criada nessa função. Não a podes retornar normalmente, tens de alocar dinamicamente a string e depois é que pode retornar.

Para utilizares memória dinâmica tens de utilizar sempre um ponteiro.

Podes criar listas ligadas, etc. Google it.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DVD

Simplificando muito:

Tens 3 tipos de memoria durante a execução de um programa:

- automatica

- estática

- dinamica

A memoria dinamica é a unica que não está definida no "manifesto" do teu programa ou seja a unica cujo tamanho não é estabelecido em tempo de compilação

O que faz então o malloc é basicamente reservar-te espaço neste tipo de memória, tendo tu posteriormente de a libertar atraves da função free.

o malloc recebe o nr em bytes que queres reservar.

Para que serve?

Para uma unica coisa reservar memoria dinamica. XDD

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoaoNascimento

Muito obrigado, na tua explicação falaste em strings, posso fazer isso com inteiros?

Para ser mais concreto sabes-me dizer como faço para ao inserir 12, posicionar na memoria deste novo:

| 1 | 2 |.....|

Existe alguma forma com o malloc?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
JoaoNascimento

Mas como faço isso com algo do tipo:

void cod_x_y()
{

int * p = (int * )malloc(8*sizeof(int));

printf("Insira a coordenada para verificar a latitude() e a longitude(): ");
scanf("%d",&cod);


printf("x: %d\n");
printf("y: \n");

}

queria  dividir por x e y o vector por exemplo: ao colocar 12345678

aparecer x: 1234 e y:5678

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Atenção, aí tens de tratar como um array.

Crias esse tal array dinamicamente e depois fazes um for com scanf's.

int k;
for(k = 0; k < 8; k++) {
  scanf("%i", &array[k]);
}


here since 2009

Partilhar esta mensagem


Ligação 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. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.