New - debug / release

Signaler
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
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

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

Magic Nono: l'informagicien! 8-)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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() )
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
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-)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
de toute facon, en debug ton application ne tournera jamais a 100%

ils disent quoi precisement microsoft ?
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
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-)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
while(compteur<4294967297) -> c'est toujours vrai, non?
Puisqu'il passe de 4294967296 à 0...
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Mais compteur est un double, j'ai pas trop compris l'intérêt
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
vecchio56 > moi, non plus, sous vc autant utiliser __int64
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
ep, vs faites fausse rute....

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

Magic Nono: l'informagicien! 8-)