Problème avec delete[]

Résolu
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 - 17 juin 2006 à 18:40
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 - 17 juin 2006 à 19:51
Salut

J'ai un petit problème. voici le code :

char* Temp = new char[100];
char* Title = new char[100];

strcpy(Temp,"Exemple");

Title = Temp + 1 ;

delete[] Title;

Cela n'a pas de sens puisque ce n'est qu'un exemple mais en gros je veux que Title soit egal a "xemple" . Est-ce que je peut faire cela de cette manière puisque lorsque que je suis en release sa passe mais en debug il me fait une erreur lorsque j'arrive à delete[] Title.

Est-ce qu'il y a un manière plus correcte de tronquer le debut ou la fin d'un tableau de caratère ??

Merci à l'avance.

11 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 juin 2006 à 19:41
Temp[] sera une alloc ou GetCommandLine, boire ou conduire faut choisir.
Temp = GetCommandLine();
Temp[strlen(Temp)-2] = '\0';
Nenni, le retour de GetCommandLine() doit être considéré comme une constante, toute écriture dessus peut amener à un crash.
delete[] Temp;
normal que plante vu que pointe sur la commandLine.

ciao...
BruNews, MVP VC++
3
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
17 juin 2006 à 18:43
J'ai changé le code pour ceci :

char* Temp = new char[100];
char* Title;

strcpy(Temp,"Exemple");

Title = Temp + 1 ;

delete[] Temp;

D'accord ca marche , ca ne fait plus d'erreur , mais ne reste-t-il pas de la mémoire non-désallouée quelque part ? Et de toute facon je ne trouve pas ca très beau comme methode si quelqu'un pouvais men donner un autre ! ;)
0
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
17 juin 2006 à 19:02
Et puis pour tronquer la fin je faisait :

char* Temp = new char[100];
strcpy(Temp,"Exemple");

Temp[strlen(Temp)-1] = '\0' ;

Sa marche pour tronquer un caractère mais lorsque je veut fair delete[] Temp , sa plante !

J'ai vraiment besoin d'une fonction pour tronquer correctement :P
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 juin 2006 à 19:09
char* Temp = new char[100];
char* Title = new char[100];
strcpy(Temp,"Exemple");
Title = Temp + 1 ;
delete[] Title;
C'est normal que ca plante, car Title ne correspond pas a une zone allouée (c'est Temp qu'il faut libérer)

char* Temp = new char[100];
strcpy(Temp,"Exemple");
Temp[strlen(Temp)-1] = '\0';
delete[] Temp;

Ca me semble tout a fait correct, tout est bien libéré
0

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

Posez votre question
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
17 juin 2006 à 19:13
Pourtant si je fais ce que tu a marqué comme correct , sa plante a delete[] Temp
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
17 juin 2006 à 19:26
char* Temp = new char[100];
strcpy(Temp,"Exemple");
Temp[strlen(Temp)-1] = '\0';
delete[] Temp;


    system("PAUSE");

aucun probleme pour moi.
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
17 juin 2006 à 19:27
sans system("PAUSE"); pardon
0
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
17 juin 2006 à 19:33
char* Path;
char* Temp = new char[MAX_PATH];

        Temp = ::GetCommandLine();
        Temp[strlen(Temp)-2] = '\0' ;
        ii = strrchr(Temp,0x22);
        i = (int)(ii - Temp + 1);
        if ( i > 1 )
            Path = Temp + i;
        else
        {
            delete[] Temp;
            break;
        }

Pour cet exemple, i = 1 donc on passe au else et puis sa plante a delete[] Temp;
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
17 juin 2006 à 19:39
j'ai pas "ii"
0
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
17 juin 2006 à 19:47
Ok je vois mais t'aurais pas une solution miraculeuse pour mettre la commandline dans Temp puis pouvoir en faire ce que jai besoin den faire c'est a dire en enlever un bout au debut pis a la fin ??
0
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
17 juin 2006 à 19:51
J'ai remplacer Temp = GetCommandLine();

par  strcpy(Temp,GetCommandLine());

Ca ne plante plus !
0
Rejoignez-nous