malloc à zéro de la mémoire?
Donné ce code C compilé avec gcc 4.3.3
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[])
{
int * i;
i = (int *) malloc(sizeof(int));
printf("%d\n", *i);
return 0;
}
J'attendrais la sortie de tout ce qui était dans la mémoire malloc() renvoie, mais au lieu de la sortie est de 0. Est malloc réinitialisation de la mémoire, il retourne? Si oui, pourquoi?
source d'informationauteur endeavormac
Vous devez vous connecter pour publier un commentaire.
malloc
lui-même n'est pas à zéro de la mémoire, mais il de nombreux systèmes d'exploitation zéro de la mémoire de votre programme de demandes pour des raisons de sécurité (pour garder un processus d'accéder à des informations potentiellement sensibles qui a été utilisé par un autre processus).La
malloc()
fonction ne permet pas de définir la mémoire allouée à une quelconque valeur. Si vous voulez vous assurer que la mémoire est zéro, utilisezcalloc()
ou l'équivalent. Sinon, vous avez tout ce qu'il y avait avant (ce qui pourrait, dans votre cas, être égal à zéro).Malloc n'a pas à remplir la mémoire. Pour des raisons de performances, la libération des versions souvent ne rien faire avec la mémoire. Un "secure" bibliothèque peuvent avoir un malloc de mise en œuvre qui efface la mémoire. C'est à la bibliothèque du maître d'œuvre. Il y a quelques modèles communs qui sont remplis en mémoire par divers compilateur bibliothèques de débogage qui sont expliqué dans ce sujet stackoverflow.
Vous avez certainement ne pouvez pas dépendre de 0.
malloc une plus grande partie et vidage à voir.
La valeur dans la mémoire allouée est officiellement défini. C99 états:
The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate.
malloc() peut faire ce qu'il veut, y compris la réinitialisation. Cela peut être délibérée, par un effet de bord de la mise en œuvre, ou vous pourriez avoir beaucoup de mémoire qui se passe à 0.FWIW sur OS X d'Apple gcc 4.0.1 je ne peux pas la faire sortir de 0 même en faisant beaucoup d'affectations: