Problème memoire.

Résolu
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 17 juil. 2006 à 19:06
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 18 juil. 2006 à 19:43
Bonjour,

Voila je fait un programme qui éfface les fichiers de manière sure. Ma méthode est copiée sur celle de vecchio56 (source) .

Pourtant j'ai une erreur , j'ai mit celle de vecchio, elle tourne niquel, je met la miène , cela ne va pas. j'ai le message de windows DCKerzor a rencontré un problème et doit fermer ...". L'erreur est situé en comment aire dans la source :

le define . (j'ai esseye aussi avec 0x100000 comme fait vecchio, mais cava pas non plus).
#define MO 1048576

Ma fonction :
BOOL EraseFile(char * szPathFile){
     HANDLE haFile;
     DWORD d;
     LPVOID lpMemory;
    
     haFile = CreateFile(szPathFile,GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
     if(haFile == INVALID_HANDLE_VALUE){
               return FALSE;
     }

     lpMemory = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,MO);
    
     DWORD dwSizeFile = GetFileSize(haFile,NULL);
     while( dwSizeFile > 0 ){
            if(dwSizeFile >= MO){
                dwSizeFile -= MO;// ERREUR ICI on ne passe jamais au if si après.
                if(!WriteFile(haFile,lpMemory,MO,&d,NULL) || d ! = MO){
                    CloseHandle(haFile);
                    HeapFree(GetProcessHeap,0,lpMemory);
                    return FALSE;
                }
            }else{
                if(!WriteFile(haFile,lpMemory,dwSizeFile,&d,NULL) || d != MO){
                    CloseHandle(haFile);
                    HeapFree(GetProcessHeap,0,lpMemory);
                    return FALSE;
                }
                dwSizeFile = 0;
            }
     }
                     
     CloseHandle(haFile);
     HeapFree(GetProcessHeap,0,lpMemory);
     return DeleteFile(szPathFile);
}

Merci d'avance.

5 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 juil. 2006 à 00:45
Salut,
Comme signalé par aardman, GetProcessHeap doit être suivie de parenthèses :
HeapFree(GetProcessHeap(),0,lpMemory);
La ligne juste après le else doit être comme ceci:
if(!WriteFile(haFile,lpMemory,dwSizeFile,&d,NULL) || d != dwSizeFile)
Tu dois donc remplacer MO par dwSizeFile, sinon le fichier ne sera jamais supprimé.
Après ces quelques petites modifications, ça devrait marcher sans problème.
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
17 juil. 2006 à 22:18
Salut,

Y'a pas des parentheses apres GetProcessHeap ?
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
18 juil. 2006 à 09:02
dwSizeFIle est déclaré en DWORD ( unsigned int) et tu lui affecte un nombre négatif??

louis14
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
18 juil. 2006 à 18:48
Oui les () un oublie de ma part , mais de toute façon ça change rien. Et je ne peut pas changer dwSizeFile (j'ai quand mm testé).

Louis14 : je ne lui affecte en rien un nombre négatif, car je vérifie dans le if(dwSizeFile >= MO) .

Donc ça ne fonctionne toujours pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
18 juil. 2006 à 19:43
oui racpp tu avait raison , il faut remplacer MO par dwSizeFile mais dans le deuxième, ou avai-je la tête :s . Merci
0
Rejoignez-nous