Bizarrerie avec EnumProcesses

Bizarrerie avec EnumProcesses - API Win32 - Programmation

Marsh Posté le 25-08-2011 à 21:10:13    

Quelqu'un peut m'expliquer pourquoi ceci ne fonctionne pas (1 processus retourné) :

Code :
  1. DWORD * processes = new DWORD[1024];
  2. DWORD size=sizeof(processes); 
  3. DWORD nbret;
  4. EnumProcesses(processes,size,&nbret);


alors que ceci fonctionne parfaitement ?
 

Code :
  1. DWORD processes[1024];
  2. DWORD size=sizeof(processes); 
  3. DWORD nbret;
  4. EnumProcesses(processes,size,&nbret);


 
Je ne comprend pas du tout. Dans un cas j'ai un tableau sur le tas, dans l'autre sur la pile. L'un fonctionne l'autre non, pourquoi ??


Message édité par PierreFeuille le 25-08-2011 à 23:29:23
Reply

Marsh Posté le 25-08-2011 à 21:10:13   

Reply

Marsh Posté le 26-08-2011 à 09:21:58    

Je n'ai jamais essayé la première syntaxe, mais il y a souvent des problèmes avec le sizeof(), par exemple, parfois on peut croire qu'il prend la taille la d'un tableau alors qu'il prend la taille d'un pointeur, mais je ne sais pas si c'est le cas ici. Donc, en fait, je préfère définir une constante pour la taille, mais je ne sais pas si ça marche ici :

#define PROCESSES_SIZE 1024
DWORD * processes = new DWORD[PROCESSES_SIZE];
DWORD size=PROCESSES_SIZE;  
DWORD nbret;
EnumProcesses(processes,size,&nbret);


Reply

Marsh Posté le 26-08-2011 à 10:14:17    

Merci de ta réponse, le problème vient effectivement de là. sizeof retourne la taille en bytes du pointeur, mea culpa.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed