Comment faire pour effacer le contenu de la mémoire en C?
Je suis à la définition d'un pointeur de char de cette manière.
char *s=(char *)malloc(10);
Après avoir rempli toutes les valeurs possibles qui peuvent s'appliquer ici, je veux effacer tout ce que j'ai écrit à s et sans l'aide de malloc nouveau envie d'écrire en s? Comment puis-je faire cela?
J'ai besoin de mettre à jour le contenu, mais si, dans la dernière itération de ne pas toutes les valeurs sont mises à jour, alors je vais être plus vieux que je ne veux pas faire.
- Veuillez expliquer ce que vous entendez par "clair".
- pourquoi s'embêter avec le nettoyage de la valeur si vous souhaitez mettre à jour le contenu de
s
de toute façon? sizeof(2*5)
drôle d'air... Essayez aussisizeof(2/0)
- qui vous donnerait un bloc de taille infinie.
- Un rêve qui devient réalité! Vous méritez un prix Nobel 😉
- et
sizeof(-1000)
serait de vous donner un négatif de la taille de tableau: très utile si vous êtes hors de la mémoire! memset
?- libre(s) permettra de libérer la mémoire allouée à pointeur s.
- juste essayer ce...
- ah oui, c'est
sizeof(int)
- Si vous souhaitez définir la zone mémoire à zéro, vous pouvez utiliser calloc. Par la façon dont, personnellement, quand je n'ai plus de mémoire, je préfère l'appeler Chuck Norris. Les puces de RAM obtenir tellement peur qu'ils se séparent, ce qui me donne le double de la mémoire. Eh bien, c'est ce que Chuck Norris m'a dit de toute façon après je lui ai donné mon âme.
Vous devez vous connecter pour publier un commentaire.
Être prudent!
malloc(sizeof(2*5))
est le même quemalloc(sizeof(int))
et alloue à seulement 4 octets sur un système 32 bits. Si vous souhaitez allouer 10 octets utilisationmalloc(2 * 5)
.Vous pouvez effacer la mémoire allouée par
malloc()
avecmemset(s, 0, 10)
oumemset(s, 0, sizeof(int))
, juste au cas où c'était vraiment ce que vous souhaitiez.Voir l'homme memset.
Une autre façon d'effacer la mémoire est à l'aide de
calloc
à la place de malloc. Il alloue de la mémoire que malloc n', mais les jeux de la mémoire à zéro en tant que bien.Quelques observations:
malloc()
dans C.malloc()
argument ne semble pas être bien; note quesizeof
est un opérateur, pas une fonction. Elle permettra d'évaluer la taille du type de son argument: 2 * 5 a typeint
, de sorte que la valeur sera probablement 4. Notez que c'est la même pour tout entier expressions:sizeof 1
est le même quesizeof 100000000
.Votre question est très incertaine, il n'est pas facile de comprendre pourquoi vous vous sentez que vous avez à "effacer" la chaîne de la zone. La mémoire est la mémoire, il doit tenir ce dernier a écrit pour elle, il n'y a pas besoin de "clair" entre l'écrit. En fait, un "clair" est juste une écriture d'une valeur précise.
Vous pouvez "clair" de la mémoire en utilisant
memset
, et le réglage de tous les octets du bloc de mémoire à0
. Ainsi, par exemple: