2011-04-28 4 views
2

1.allocation de mémoire pour statique locale et variable locale

void main(void) 
{ 
    int *ptr1; 
    ptr1 = (int *)malloc(..); 
} 

2.

void main(void) 
{ 
    static int *ptr2; 
    ptr2 = (int *)malloc(..); 
} 

Je veux demander comment est l'allocation de mémoire fait pour ptr1 & ptr2?

+1

En C, la conversion de la valeur de retour de 'malloc' n'est pas nécessaire. De même, 'void main (void)' devrait être au moins 'int main (void)'. –

Répondre

9

Le pointeur ptr1 est lui-même affecté à la pile. ptr1 points à la mémoire sur le tas.

Le pointeur ptr2 lui-même est affecté au démarrage du programme (avant main est invoqué) et est globale, mais se trouve être visible que dans main parce qu'il est déclaré dans son champ d'application. ptr2 pointe également vers la mémoire sur le tas.

Déclarer ptr2 en dehors de main le rendrait seulement visible dans toutes les fonctions au-dessous, mais son stockage serait le même.

+0

même si je fais ptr2 global aura-t-il le même effet que celui de maintenant – Aragorn

+0

Si vous déclarez 'int * ptr2;' en dehors de 'main', ce sera le même sauf que' ptr2' sera visible dans toutes les autres fonctions en dessous, pas seulement 'main'. –

+0

ok merci beaucoup d'aide! – Aragorn

Questions connexes