Etrange phénomème paradoxale :)

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 17 août 2005 à 23:31
 magic_Nono - 23 août 2005 à 01:43
Pourquoi quand j'execute mon prog depuis le dossier Release il plante et quand je le lance depuis VS il ne plante pas..

J'ajoute qu'il plante lors d'un appel à une fonction qui charge un
fichier, mais j'ai pris soin de mettre le chemin complet du fichier
avec GetModuleFileName

Donc je ne comprend pas très bien ^o)





//Signature en construction

33 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 23:37
Quasi minuit c'est bientôt l'heure du crime pas des extralucides.

ciao...
BruNews, MVP VC++
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 23:39
J'ai trouver où ça merder mais j'comprend pas pourquoi....

MessageBox(NULL, "Ligne 114", 0, 0);

Buff = new char[dwByteToRead+1];

MessageBox(NULL, "Ligne 116", 0, 0);



il m'affiche la boite Ligne 114 mais pas la Ligne 116

Pourtant quand je le lance depuis VS, il continue sa route...



//Signature en construction
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 23:44
Trace dwByteToRead, verifie si le new à echoué (catch std::bad_alloc) ...
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 23:46
Bé moi j'veux bien lol , mais le problème c'est que j'peux pas trop
jouer avec le debugger vu qu'il plante uniquement quand je le lance
depuis l'explorateur

Avec VS, il marche impec....

//Info
MessageBox(hWnd,"
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 23:47
et vaut combien ce brave 'dwByteToRead' ???

ciao...
BruNews, MVP VC++
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 23:50
Ouai, affiche le dans un messagebox avant le new au moins.
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 23:53
dwByteToRead = GetFileSize(hFile, NULL);

char Buffer[512];

wsprintf(Buffer, "ByteToRead : %d", dwByteToRead);

MessageBox(0,Buffer,0,0);



Il vaut 152... enfin pour le fichier hein :) il varie...
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 23:54
Et il vaut exactement la même chose que lorsque que j'execute depuis VS...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 23:55
envoie toute la fonction.
Tu es sur de la validité de hFile ?

ciao...
BruNews, MVP VC++
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
18 août 2005 à 00:00
Bon je garantie rien pour la propreté lol :)

Et oui je suis du hFile puisque je le test :p



BOOL LoadUser(char *szName, LPUSER hUser)

{

HANDLE hFile;

DWORD dwByteToRead;

DWORD dwByteRead;

char *Buff;



char Path[1024];



char *d = Path + GetModuleFileName(NULL, Path, 1024);

while(*d != '\\') *d--;

*++d=0;



strcat(Path, szName);

hFile = CreateFile( Path,

GENERIC_READ,



FILE_SHARE_READ,

NULL,

OPEN_EXISTING,

0,

0);

if(hFile == INVALID_HANDLE_VALUE)

{

CloseHandle(hFile);

return FALSE;

}



dwByteToRead = GetFileSize(hFile, NULL);



Buff = new char[dwByteToRead+1];



if(!ReadFile(hFile, Buff, dwByteToRead, &dwByteRead, NULL))

{

MessageBox(NULL, "Erreur dans la lecture du fichier.", "Erreur", 0x10);

CloseHandle(hFile);

return FALSE;

}

CloseHandle(hFile);

CreateUser(hUser, szName);



LPSHORTCUT lpRaccourci = InitialiserShortcut();



int iSeparateur=0;

char *c[2];



c[iSeparateur] = strtok(Buff, ";");

while(c != NULL)

{

iSeparateur++;

if(iSeparateur>1)

{

Remplir(lpRaccourci, c[0], c[1]);

AjouterRaccourci(hUser, lpRaccourci);

lpRaccourci = InitialiserShortcut();

iSeparateur = 0;

}

c[iSeparateur] = strtok(NULL, ";");

if(!c[iSeparateur])

break;

}



delete[] Buff;

if(!hUser)

return FALSE;



return TRUE;

}
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2005 à 00:03
if(hFile == INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
return FALSE;
}

1ere erreur, on ne close pas un handle invalide puisqu'il ne pointe sur rien.

ciao...
BruNews, MVP VC++
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
18 août 2005 à 00:05
Ah okay, j'pensais qu'il aurait été mal initialisé donc le Close quoi

C'est bon à savoir ça déjà :p

J'fais un test
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2005 à 00:06
Buff = new char[dwByteToRead+1];
Faut tester validité de Buff toujours.


Buff[dwByteToRead] = 0; A AJOUTER

on verra ensuite.

ciao...
BruNews, MVP VC++
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
18 août 2005 à 00:08
A mettre dans un bloc try.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2005 à 00:08
Teste toujours si lecture sans erreur de cette maniére, c'est la plus sure:

dwByteRead = 0;
ReadFile(hFile, Buff, dwByteToRead, &dwByteRead, NULL);
CloseHandle(hFile);
if(dwByteToRead != dwByteRead) ERREUR DE LECTURE

ciao...
BruNews, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2005 à 00:10
steve > new ne retourne pas NULL si on ne modifie rien ???

Si envoie une erreur alors lui préférer malloc sans aucun doute, surtout qu'il n'y a pas de constructeur.

ciao...
BruNews, MVP VC++
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
18 août 2005 à 00:10
Buff = new char[dwByteToRead+1];

if(!Buff)

{

MessageBox(NULL, "Invalidité Buff", NULL, NULL);

return FALSE;

}

Buff[dwByteToRead] = 0;


Il passe même pas par la condition...

Il plante avant...

Sauf avec VS

J'upload tout sur mon site attend lol

Mais tu critiques pas le fouilli hein :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2005 à 00:13
ok mais je look demain, now je vais dodo.
Mets le lien.

ciao...
BruNews, MVP VC++
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
18 août 2005 à 00:14
BruNews > avant (pre-standard), new retournait 0, maintenant il
jette une exception de type std::bad_alloc. C'est sur que pour
l'utilisation qui en est faite (c'est du C) autant utiliser malloc et
verifier la valeur retour.
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
18 août 2005 à 00:14
http://membres.lycos.fr/Joky/Desktop%20Multi%20User.rar

Bonne nuit l'ami :p

Reve pas trop de moi :)
0
Rejoignez-nous