tout d'abord voici la config software au cas ou l'erreur est une erreur connue
config: environ 380 Mo
win 2000 5.00.2195
SP4
pour les erreurs qui suivent , elles se produisent de manière aléatoire à première vue.
1) avec new
a) defois il me retourne un NULL alors que j'ai suffisement de mémoire, pourquoi? évidemment je gère le NULL dans la programme mais c'est très ennuyeux.
b) defois il plante dans le code du système, voici le log de la fenêtre call stack en mode debug (en release ça plante aussi)
NTDLL! 784613b1()
NTDLL! 7848688d()
NTDLL! 78495367()
NTDLL! 784864f6()
NTDLL! 784ac9e3()
_heap_alloc_base(unsigned int 1328) line 161
_heap_alloc_dbg(unsigned int 1279, int 1, const char * 0x00000000, int 0) line 367 + 9 bytes
_nh_malloc_dbg(unsigned int 1279, int 1, int 1, const char * 0x00000000, int 0) line 242 + 21 bytes
_nh_malloc(unsigned int 1279, int 1) line 194 + 19 bytes
operator new(unsigned int 1279) line 24 + 11 bytes
ClientRun(void * 0x00742b60) line 263 + 10 bytes
KERNEL32! 77e7b388()
2) avec fprintf()
sur la commande fprintf(logfile,"[%s] [%d] %s\n",tm,ThreadId,st); qui écrit donc dans un fichier et qui est appelé en multithread.
les paramètres fournis a la fonction sont tous corrects.
j'ai le log suivant dans la fenêtre call stack en mode debug (en release ça plante aussi)
NTDLL! 784613b1()
NTDLL! 7848688d()
NTDLL! 78495367()
NTDLL! 784864f6()
NTDLL! 784ac9e3()
_heap_alloc_base(unsigned int 4144) line 161
_heap_alloc_dbg(unsigned int 4096, int 2, const char * 0x0048b470 `string', int 59) line 367 + 9 bytes
_nh_malloc_dbg(unsigned int 4096, int 0, int 2, const char * 0x0048b470 `string', int 59) line 242 + 21 bytes
_malloc_dbg(unsigned int 4096, int 2, const char * 0x0048b470 `string', int 59) line 163 + 27 bytes
_getbuf(_iobuf * 0x00494148) line 59 + 19 bytes
_flsbuf(int 91, _iobuf * 0x00494148) line 153 + 9 bytes
write_char(int 91, _iobuf * 0x00494148, int * 0x018cb67c) line 1083 + 75 bytes
_output(_iobuf * 0x00494148, const char * 0x004896f1, char * 0x018cb8e8) line 393 + 21 bytes
fprintf(_iobuf * 0x00494148, const char * 0x004896f0 `string') line 64 + 17 bytes
WriteLog(unsigned long 12268, const char * 0x00489b80 `string') line 53 + 32 bytes
ClientRun(void * 0x0075db60) line 169 + 47 bytes
KERNEL32! 77e7b388()
alors j'ai bien une solution pour gérer les erreurs ( try {} catch() ), mais je préfèrerai résoudre le problème à la place.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Aurélien REGAT-BARREL
Hello, Tu dois utiliser VC++ 6 je présume vu que new est censé lever une exception bad_alloc en cas d'échec, sauf avec des bieux comoilos (donc méfies-toi le jour où tu passes à la version suivante!). Ce genre de comportements, printf qui fait nimp, etc... c'est généralement le symptome qu'il y a un probleme ailleurs dans ton code qui corrompt la mémoire, ce qui peut expliquer l'échec de new. Vérifies bien tes pointeurs, que tu fais pas d'overflow, que tu delete bien un tableau alloué par new [] avec delete []... Compile et exécute en debug, avec <crtdbg.h> et #define _CRTDBG_MAP_ALLOC et fait des dumps & vérifs avant et après le problème pour voir ce qu'il en dit... http://msdn.microsoft.com/library/en-us/vsdebug/html/_core_Using_C_Run2dTime_Library_Debugging_Support.asp
-- Aurélien REGAT-BARREL
Hello,
Tu dois utiliser VC++ 6 je présume vu que new est censé lever une exception
bad_alloc en cas d'échec, sauf avec des bieux comoilos (donc méfies-toi le
jour où tu passes à la version suivante!).
Ce genre de comportements, printf qui fait nimp, etc... c'est généralement
le symptome qu'il y a un probleme ailleurs dans ton code qui corrompt la
mémoire, ce qui peut expliquer l'échec de new. Vérifies bien tes pointeurs,
que tu fais pas d'overflow, que tu delete bien un tableau alloué par new []
avec delete []... Compile et exécute en debug, avec <crtdbg.h> et #define
_CRTDBG_MAP_ALLOC et fait des dumps & vérifs avant et après le problème pour
voir ce qu'il en dit...
http://msdn.microsoft.com/library/en-us/vsdebug/html/_core_Using_C_Run2dTime_Library_Debugging_Support.asp
Hello, Tu dois utiliser VC++ 6 je présume vu que new est censé lever une exception bad_alloc en cas d'échec, sauf avec des bieux comoilos (donc méfies-toi le jour où tu passes à la version suivante!). Ce genre de comportements, printf qui fait nimp, etc... c'est généralement le symptome qu'il y a un probleme ailleurs dans ton code qui corrompt la mémoire, ce qui peut expliquer l'échec de new. Vérifies bien tes pointeurs, que tu fais pas d'overflow, que tu delete bien un tableau alloué par new [] avec delete []... Compile et exécute en debug, avec <crtdbg.h> et #define _CRTDBG_MAP_ALLOC et fait des dumps & vérifs avant et après le problème pour voir ce qu'il en dit... http://msdn.microsoft.com/library/en-us/vsdebug/html/_core_Using_C_Run2dTime_Library_Debugging_Support.asp