Debbugage

cs_Nano2 Messages postés 6 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 11 janvier 2003 - 9 janv. 2003 à 23:50
filter Messages postés 42 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 16 mai 2003 - 10 janv. 2003 à 16:34
Pouvez vous svp m'aider a debugger le code suivant :

void main() // 1
{
char* pt; // 2
pt = new char[10]; // 3
// [...]
delete pt; // 4
}

C bien la ligne 4 qui est fausse.. Si oui pkoi?? Merci d'avance..

5 réponses

filter Messages postés 42 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 16 mai 2003
10 janv. 2003 à 08:51
> delete pt; // 4
> }
>
> C bien la ligne 4 qui est fausse.. Si oui pkoi?? Merci d'avance..

Le syntax correct est:

delete [] pt;

et tu dois aussi faire que pt reference le meme adress.
Filter
0
cs_Nano2 Messages postés 6 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 11 janvier 2003
10 janv. 2003 à 11:37
Pourrais tu m'expliquer comment faire que pt reference la meme adresse comme tu dis..
0
filter Messages postés 42 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 16 mai 2003
10 janv. 2003 à 12:09
> Pourrais tu m'expliquer comment faire que pt reference la
>>meme adresse comme tu dis..

> Pourrais tu m'expliquer comment faire que pt reference la
>>meme adresse comme tu dis..

En gros:
Si tu utilise
delete [] pt;
Fais attention que ton pointeur est reference sur un des elements du tableau(c pas obligatoire qu'il pointe vers le premier)...

Ce que tu ne dois pas faire:

TYPE *ptr = new TYPE[size];
//..blabla...

TYPE data;
ptr = &data; //La deja tu as un memory leak, il est mpossible
//de revenir et libere la memoire alloue
//precedement...
//..blabla...

delete [] ptr; // Faux....
Filter
0
cs_Nano2 Messages postés 6 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 11 janvier 2003
10 janv. 2003 à 14:57
Bon je ne suis qu'un débutant.. Tu pourrais me donner une version valide du code?? Stp..
0

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

Posez votre question
filter Messages postés 42 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 16 mai 2003
10 janv. 2003 à 16:34
> Bon je ne suis qu'un débutant.. Tu pourrais me donner une
>>version valide du code?? Stp..

Version valide:

int main(void){
char* ptr = new char[10];
int i = 0;
for(; i < 9; i++ )
ptr[i] = 'a' + i;
delete [] ptr;
return 0;
}

Faux 1:

int main(void){
char* ptr = new char[10];
int i = 0;
for(; i < 9; i++ )
ptr[i] = 'a' + i;
delete ptr;
return 0;
}

Seulement un octet est libere...(le premier dans ce cas)

Faux 2:
int main(void){
char* ptr = new char[10];
int i = 0;
char bla;
for(; i < 9; i++ )
ptr[i] = 'a' + i;
ptr = &bla;
delete ptr;
return 0;
}

Compile sans erreur mais tu auras une faute lors de l'execution.
Filter

PS: Il y a bcp des livres et tutorials sur le net qui peuvent t'aider si qqch n'est pas clair....
0
Rejoignez-nous