Violation de lecture en C
Résolu
benj2711
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je n'arrive pas à comprendre mon erreur dans ce petit bout de code où il me fait une erreur "Exception non gérée à 0x52df6490 (msvcr100d.dll) dans black jack Sv.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x0d364718." en me pointant cette ligne
dans strftime.c. Help me !
voici le code :
je n'arrive pas à comprendre mon erreur dans ce petit bout de code où il me fait une erreur "Exception non gérée à 0x52df6490 (msvcr100d.dll) dans black jack Sv.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x0d364718." en me pointant cette ligne
_VALIDATE_RETURN( ( ( timeptr->tm_mon >=0 ) && ( timeptr->tm_mon <= 11 ) ), EINVAL, FALSE)
dans strftime.c. Help me !
voici le code :
void log(char* adresse){ DWORD dwByRead; HANDLE log = CreateFile("fichier.log",GENERIC_WRITE,0,(LPSECURITY_ATTRIBUTES) NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); time_t rawtime; struct tm *timeinfo; time(&rawtime); timeinfo = localtime (&rawtime); char message[70]; strcat(message,"\r\n"); strftime (message,70,"%c",timeinfo); puts(message); strcat(message," : "); strcat(message, "fin de session de "); strcat(message, adresse); SetFilePointer(log,0,NULL,FILE_END); WriteFile(log,&message,sizeof(message),&dwByRead,NULL);//écriture fichier CloseHandle(log); }
A voir également:
- Violation de lecture en C
- Confirmation de lecture whatsapp - Guide
- Télécharger livre de lecture ce2 gratuit pdf - Télécharger - Éducatifs
- Accusé de lecture gmail - Guide
- Lecture epub sur pc - Guide
- Lecture en français - Télécharger - Vie quotidienne
4 réponses
Bonjour
Tu es sûr que ton message complet ne dépasse pas 70 caractères ?
Je suis étonné de voir que tu le commences par strcat(message,"\r\n"); alors que le message n'est pas initialisé : tu ne sais pas où vont s'écrire le "\r\n". Tu devrais mettre strcpy(message,"\r\n");
Je ne sais pas dans quel ordre le compilateur range les variables locales, mais si message est avant les autres, ce qui est très possible, et que tu débordes, tu viens écraser timeinfo, ce qui expliquerait très bien ton erreur.
Tu es sûr que ton message complet ne dépasse pas 70 caractères ?
Je suis étonné de voir que tu le commences par strcat(message,"\r\n"); alors que le message n'est pas initialisé : tu ne sais pas où vont s'écrire le "\r\n". Tu devrais mettre strcpy(message,"\r\n");
Je ne sais pas dans quel ordre le compilateur range les variables locales, mais si message est avant les autres, ce qui est très possible, et que tu débordes, tu viens écraser timeinfo, ce qui expliquerait très bien ton erreur.
benj2711
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
j'essaye ça immédiatement, merci d'avoir répondu aussi rapidement !
tu ne mets pas la partie du code source qui est pointé, mais une autre. Je ne vois pas comment t'aider.
bon voila je me suis renseigné un peu et j'ai trouvé une facon qui fonctionne bien, merci bcp :)
void log(char* adresse, char* motif){ char message[100]; time_t temps_act; time(&temps_act); strcpy(message,ctime(&temps_act)); strcat(message," "); strcat(message,motif); strcat(message," "); strcat(message, adresse); strcat(message,"\n"); int tMessage=-1, x=0; for(x=0; x<sizeof(message) && message[x]!='Ì'; x++); tMessage=x-1; DWORD dwByRead; HANDLE fLog = CreateFile("fichier.log",GENERIC_WRITE,0,(LPSECURITY_ATTRIBUTES) NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); SetFilePointer(fLog,0,NULL,FILE_END); WriteFile(fLog,&message,tMessage,&dwByRead,NULL);//écriture fichier CloseHandle(fLog); }