C Instanciation de matrice - Pile ou allocation de tas?
Je peux vous garantir que cette question a été posée, mais je n'ai pas été en mesure de trouver par le biais de la recherche; désolé à l'avance pour les éventuels licenciements.
C'est mon (potentiellement mauvais) comprendre que vous ne allouer sur la pile quand vous savez que la taille d'un objet au moment de la compilation. Ainsi, dans le cas de l'initialisation d'un tableau, vous pouvez faire l'une de ces (et cela devrait aller sur la pile):
char charArray[50];
Depuis la taille de ce tableau est connu au moment de la compilation, ce qui devrait avoir aucun problème.
D'autre part, cette (je crois) est également valable code:
char anotherCharArray[someVariable + 50];
Serait-ce aller sur la pile? Je suis sûr que le code de segmentation si vous free (), donc il me fait penser qu'il fait, mais il n'a pas vraiment de sens pour moi. De même, c'est du 100% seule situation où vous devez utiliser free() lorsque les données ont été allouée par malloc?
Merci d'avance pour votre aide.
source d'informationauteur Shookit
Vous devez vous connecter pour publier un commentaire.
Oui. (En dehors de calloc et realloc, leur valeur de retour est également
free()
'd. De même, il y a des fonctions que l'utilisation de malloc() et de ce fait est documenté, par exemplestrdup()
- la valeur de retour de ces fonctions est aussi se libérer à l'aide defree()
évidemment.)Oui, il le fait (dans la plupart des implémentations - bien sûr, ce n'est pas toujours vrai que vous assumez, mais sur la plupart des plates-formes, il est). Et oui, c'est le code d'accès valide, mais c'est seulement la norme en C99.
Si
char charArray[50];
est défini à la portée du fichier (en dehors de toutes les fonctions) ou eststatic
il ne va pas être de la pile, il va y avoir un mondial préaffectés au programme de début de la variable. Si ce n'est passtatic
et est définie en fonction de la portée, il va être sur la pile.char anotherCharArray[someVariable + 50];
ne peut être défini à portée de la fonction et va sur la pile.Tous les ci-dessus s'applique à typique des implémentations de C. Atypiques peuvent utiliser le tas au lieu de la pile et la place de la préaffectés de l'espace dans la section de données du programme.
Vous n'avez pas
free()
ce qui n'a pas été alloué avecmalloc()
calloc()
ourealloc()
. Simple. Certaines fonctions peuvent nécessiter l'utilisation de l'un des ci-dessus, par exemple POSIXstrdup()
.