Capítulo 3
Parte 2:
Alocação Dinâmica de Memória


3.1 As Funções de Alocação Dinâmica de Memória em "C"

Já visto até agora:

Para entender, veja este exemplo de um programa e o esquema de alocação de demória que vai ocorrendo. O linhde código que está sendo executada esta sempre em vermelho:
 
Ao ser inciada e execução:

#include <stdio.h>

char *a, *b;

int func_A ()
{
int local1, local2;
- - - 
}

void func_B ()

int localA, localB;
localA = func_A();
localB = func_A();
}

main ()
{
a = "Essa aula é legal";
b = "Será mesmo?"
func_B();
}



 
Ao serem atribuídas as variáveis estáticas 
(neste caso como ponteiros):

#include <stdio.h>
char *a, *b;

int func_A ()
{
int local1, local2;
- - - 
}

void func_B ()

int localA, localB;
localA = func_A();
localB = func_A();
}

main ()
{
a = "Essa aula é legal";
b = "Será mesmo?"
func_B();
}



 
Logo após a chamada de func_b:

#include <stdio.h>
char *a, *b;

int func_A ()
{
int local1, local2;
- - - 
}

void func_B ()

int localA, localB;
localA = func_A();
localB = func_A();
}

main ()
{
a = "Essa aula é legal";
b = "Será mesmo?"
func_B();
}



 
Logo após a chamada de func_A a partir de func_B:

#include <stdio.h>
char *a, *b;

int func_A ()
{
int local1, local2;
- - - 
}

void func_B ()

int localA, localB;
localA = func_A();
localB = func_A();
}

main ()
{
a = "Essa aula é legal";
b = "Será mesmo?"
func_B();
}


Alocação Dinâmica em "C" Função malloc():
 
 
 
 

Modelagem da estrutura

Modelagem da Lista

constantes Maxlista = 100;

tipo Lista {

caracter *dados[Maxlista];

" Vetor de ponteiros para char "

inteiro ultimo;

};


 
 
 
 

Exercício Nº 2:
Trabalho com Passagem de Parâmetros

Modelagem de um Lancamento tipo Lancamento {

caracter *nome;

"ponteiro para char alocado no heap"

real valor;

};

Modelagem de um tipo Lista para
Débitos ou Créditos constantes Maxlista = 100;

tipo ListaContabil {

Lancamento dados[Maxlista];

" Vetor de Estrutura Lançamento "

inteiro ultimo;

};

Usando (pseudo código) ListaContabil debitos, creditos; adiciona(&debitos, nomeLanc, valorLanc) Inteiro FUNÇÃO adiciona(ListaContabil *plano;

caracter *nome;

real valor)

Desenho

Usando (código C)

ListaContabil debitos, creditos;

debitos.dados[2].valor = 5.0;

strcpy(debitos.dados[2].nome, buffer);

Dentro das funções:

Suponha: ListaContabil *ponteiro

e ponteiro = &debitos;

ponteiro->dados[2].valor = 5.0;

strcpy(ponteiro->dados[2].nome, buffer);