New - debug / release

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 15 oct. 2004 à 13:26
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 15 oct. 2004 à 17:26
PB du new.... alors que ça passe avec des alloc classiques
On me conceil d'utiliser des new plutot que des malloc en C++

très bien mais

voici un petit morceau de code à tester avec Visual C++:

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
unsigned long double compteur=0;
int* toto;

while(compteur<4294967297)
{
toto=new int;
delete toto;
compteur++;
}

return 0;
}

A Priori, rien de bien méchant....

Si le programme est compilé en version DEBUG, à chaque invocation de new,
un compteur d'allocation s'incrémente pas celui que j'ai appelé compteur dans
le programme mais un autre au sein de la fonction new.

Résultat: Lorsque le programme a réalisé 4 294 967 295 opérations d'allocations
(limite d'un long int), on se fait jeter avec le message "User
BreakPoint".

Réponse de Microsoft: Vous n'avez qu'a faire tourner votre application en release !!!
(j'en connais plusieurs ici qui disent la mm chose...)

Chez moi quand une application est pas foutue de tourner en DEBUG je vois pas pourquoi je la ferai tourner en RELEASE !!!

On ns a tjs appris a tester en debug et C plus facile pour éviter certains pb

++
Magic Nono: l'informagicien! 8-)

11 réponses

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
15 oct. 2004 à 13:28
rq :
est-ce que ce genre de cdes passe avec VC++7 et VC# ?

Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 oct. 2004 à 14:26
fais gaffe avec ton compteur long double, meme avec cette precision, c'est pas sur qu'il y ai exactement le nombre d'incrementations voulue

unsigned compteur = 0;

while( compteur < std::numeric_limits::max() )
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
15 oct. 2004 à 14:36
C une simplification

j'avais vérifié auparavant que

4294967297 < std::numeric_limits::max()

(affichage de msg)
ptet po avec les std mais le fichier limits.h

m'enfin, en tt cas, CT po la rq...

Magicalement
Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 oct. 2004 à 14:45
de toute facon, en debug ton application ne tournera jamais a 100%

ils disent quoi precisement microsoft ?
0

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

Posez votre question
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
15 oct. 2004 à 14:56
simplement ce que BN et toi dites :
uniquement release

mais ils préconisent tt de mm débug et disent de passer pr les cas ou y a des pb sans qu'ils devraient y en avoir en release

Perso, je suis tombé que 2 ou 3* sur ces cas limites mais
y a des fois ou ça gave...
car ça fait rechercher des bugs ou il n'y en a pas.

Magic Nono: l'informagicien! 8-)
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
15 oct. 2004 à 16:02
while(compteur<4294967297) -> c'est toujours vrai, non?
Puisqu'il passe de 4294967296 à 0...
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 oct. 2004 à 16:15
il passe de 4294967295 à 0

boucle inf

while( compteur < std::numeric_limits::max() )

vrai tant que compteur != std::numeric_limits::max()

et en c faut allez voir les macros dans limits.h, mais jamais un truc litteral en dur
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
15 oct. 2004 à 16:18
Mais compteur est un double, j'ai pas trop compris l'intérêt
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 oct. 2004 à 16:20
mais dans son cas compteur est un long double, le nombre d'incrementation n'est pas certains et l'entier sera promu en long double
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 oct. 2004 à 16:22
vecchio56 > moi, non plus, sous vc autant utiliser __int64
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
15 oct. 2004 à 17:26
ep, vs faites fausse rute....

le pb est ds le compteur long int contenu ds le new version debug !!!!!

Magic Nono: l'informagicien! 8-)
0
Rejoignez-nous