Problème de delete

ManTico Messages postés 11 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 21 juillet 2005 - 12 juin 2004 à 14:32
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 12 juin 2004 à 19:58
Salut à tous, j'ai un peu de peine avec la gestion de la mémoire et je voulais savoir deux choses :
- pourquoi en mode Debug mon prog plante sur les delete?
- pour libèrer un tableau (char* T = new char[5];) faut-il utiliser delete, delete[] ou delete[5]?

11 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 juin 2004 à 15:14
si ton delete plante, ca ve dire que tu libere un truc que tu n'a pas alloué, tu doit avoir une fuite

utilise delete[] pour liberer ce que tu a alouer avec new [...]
0
ManTico Messages postés 11 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 21 juillet 2005 1
12 juin 2004 à 16:28
Je pense que la mémoire doit être allouée, car il ne plante qu'en mode Debug et passe en mode Release.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 juin 2004 à 16:35
ben ca plante pas forcement, fais voir le code
0
ManTico Messages postés 11 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 21 juillet 2005 1
12 juin 2004 à 17:01
Ce code passe en Release mais pas en Debug :

#include

using namespace std;

void main()
{
char* T = new char[5];

T = "dfgjz";

cout << T << "\n";

delete[] T;
}
0

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

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 juin 2004 à 17:14
c'est bien ce que je disais, une grosse fuite

a mon avis si tu maitrise pas les pointeurs, utilise plutot string

pour ton probleme, si tu fais ca avec des char*

#include
#include <cstring>

using namespace std;

int main()
{
char* T = new char[5];

strcpy(T,"dfgjz");

cout << T << '\n';

delete[] T;
}
0
cs_alain34270 Messages postés 85 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 18 septembre 2005
12 juin 2004 à 17:36
parce que quand tu fais :

T = "dfgjz"

tu donnes au pointeur T l'adresse du début de la mémoire contenant "dfgjz" qui, de cette manière, est allouée sur la pile, et non dans le tas.

Quand tu fais ton delete, tu essaies donc de libérer une zone mémoire de la pile...

a+
alain
0
ManTico Messages postés 11 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 21 juillet 2005 1
12 juin 2004 à 17:37
Merci, j'avais oublier qu'il fallait faire des copie mémoire avec les pointeurs.
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
12 juin 2004 à 18:14
tu peux faire ca aussi:

*T=dfgjz"; a la place de strcpy(T,dfgjz");
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
12 juin 2004 à 18:16
*T="dfgjz"; a la place de strcpy(T,"dfgjz");

pardon g oublié des guillemets!!
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 juin 2004 à 18:23
koi ? ta vu ce que tu a ecris ??
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 juin 2004 à 19:58
Quel compilo exotique acceptera cela ?

ciao...
BruNews, Admin CS, MVP Visual C++
0