Utiliser memset avec unsigned long *ma_variable

ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 - 29 avril 2009 à 17:04
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 29 avril 2009 à 21:03
Bonjour,

Je possède une variable unsigned long *ma_variable = malloc( sizeof(unsigned long) * 10 ); que je souhaiterais remplir de 0, j'ai alors penser à la fonction memset() mais le problème c'est que lorsque je fait memset(ma_variable,0,sizeof(ma_variable)); tous les caractères ne sont pas remis à zéro. Je me suis alors rendu sur MSDN et est trouvé cela http://msdn.microsoft.com/en-us/library/1fdeehz6(VS.71).asp : il semblerait que memset soit fait pour les char* et non les int*.

Puis-je utiliser memset() avec mon int *ma_variable ?
memset( ma_variable, 0, _msize(ma_variable) ); est-il la solution ?

Merci d'avance pour vos réponses et à bientôt !

2 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
29 avril 2009 à 17:28
Salut,

Commence déjà par regarder le prototype de memset :
void *memset(void *s, int c, size_t n);

En quoi est-ce que c'est fait pour les char* et non les int* ? Si elle prend un void* c'est pour tout accepter comme pointeur. maintenant relis son fonctionnement :
«The  memset()  function  fills  the  first  n  bytes of the memory area pointed to by s with the constant byte c.»
Rien qu'avec ça tu devrais réaliser ton erreur et la corriger. Au cas où tu peine, regarde plus précisément ce qu'est exactement le dernier paramètre de la fonction et compare avec ce que tu as écrit dans l'appel a memset et celui a malloc.

Conclusion: vive le man :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 avril 2009 à 21:03
ma_variable étant un pointeur:sizeof(ma_variable) 4 !!! 8 si tu compiles en x64.


int i = 9; // DERNIER ELEM
do {
  ma_variable[i] = 0;
} while(--i >= 0);


ah que voila du memset ...

ciao...
BruNews, MVP VC++
0
Rejoignez-nous