Duvida sobre alocação de memória
22/03/2006
0
{
char m_cDia;
char m_cMes;
short m_shAno;
short m_shAnoMin, m_shAnoMax;
};
typedef struct _Data Data;
void Inicia( Data * pdtParam );
/* ************************** */
void Inicia( Data * pdtParam )
{
pdtParam->m_shAnoMIn = 1;
pdtParam->m_shAnoMax = 9999;
}
/* ************************** */
// então qd acontece a chamada:
int main()
{
Data dtHoje;
Inicia(&dtHoje);
return 0;
}
duvida 1: Como foi a alocação de memória neste caso ?
duvida 2: e se a função inicia fosse: Data Inicia(Data dtParam) e fosse usada assim:
Inicia(dtHoje) como seria a alocação de memória neste outro caso ?
Fabiano Góes
Posts
22/03/2006
Massuda
[quote:5a8f0cf03b=´Fabiano Góes´]e se a função inicia fosse: Data Inicia(Data dtParam) e fosse usada assim:[/quote:5a8f0cf03b]Também é alocada na pilha do programa, mas essa alocação é feita quando da chamada da função Inicia(); como o parâmetro é passado por valor nesse caso, na chamada da função Inicia() o compilador além de reservar memória na pilha faz uma cópia de dtHoje nessa struct Data recém alocada; alterações feitas em dtParam não se refletem em dtHoje. Isso é uma fonte ´legal´ de bugs difíceis de se achar.
23/03/2006
Fabiano Góes
vc conhece algum livro ou algum material sobre:
alocação de memoria, pilha, etc ?
23/03/2006
Massuda
Clique aqui para fazer login e interagir na Comunidade :)