[C++] new[] modifié mais reste à NULL
Résolu/Fermé
axel50397
Messages postés
113
Date d'inscription
mercredi 8 août 2007
Statut
Membre
Dernière intervention
17 mars 2014
-
29 oct. 2010 à 03:26
axel50397 Messages postés 113 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 17 mars 2014 - 29 oct. 2010 à 22:24
axel50397 Messages postés 113 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 17 mars 2014 - 29 oct. 2010 à 22:24
A voir également:
- [C++] new[] modifié mais reste à NULL
- Mon pc s'allume mais lécran reste noir sans bip - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
- Combien de temps reste une story sur facebook - Guide
3 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
29 oct. 2010 à 08:53
29 oct. 2010 à 08:53
^%Salut.
règle de base en C : les passages par argument à une fonction se font par copie.
si tu as f(type x), et que tu appels la fonction ainsi :"f(y);" en gros l'ordinateur fait :
f(type x=y){x=...}
Donc y n'est jamais modifié.
Dans ton cas, type est "char*".
tu as y=NULL; et sa valeur ne changera pas.
Si tu veux modifier la valeur, il faut passer l'adresse de ta variable.
Tu fais du C++, utilise std::string, et le passage par référence, ça sera nettement plus simple.
règle de base en C : les passages par argument à une fonction se font par copie.
si tu as f(type x), et que tu appels la fonction ainsi :"f(y);" en gros l'ordinateur fait :
f(type x=y){x=...}
Donc y n'est jamais modifié.
Dans ton cas, type est "char*".
tu as y=NULL; et sa valeur ne changera pas.
Si tu veux modifier la valeur, il faut passer l'adresse de ta variable.
Tu fais du C++, utilise std::string, et le passage par référence, ça sera nettement plus simple.
axel50397
Messages postés
113
Date d'inscription
mercredi 8 août 2007
Statut
Membre
Dernière intervention
17 mars 2014
16
29 oct. 2010 à 11:48
29 oct. 2010 à 11:48
Salut,
J'y ai effectivement déjà pensé, mais là où ça passait pas dans la tête... C'est le cas de strcpy?
Pourquoi dans ce cas, quand on fait strcpy(x, y), ce serait différent?
A moins bien sûr que strcpy utilise des références? (sauf si je me trompe...)
Je comptais justement passer par les strings, mais je voulais d'abord comprendre
Mon erreur =)
Merci a toi!
J'y ai effectivement déjà pensé, mais là où ça passait pas dans la tête... C'est le cas de strcpy?
Pourquoi dans ce cas, quand on fait strcpy(x, y), ce serait différent?
A moins bien sûr que strcpy utilise des références? (sauf si je me trompe...)
Je comptais justement passer par les strings, mais je voulais d'abord comprendre
Mon erreur =)
Merci a toi!
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
29 oct. 2010 à 12:09
29 oct. 2010 à 12:09
dans strcpy, tu ne modifie pas x, mais les valeurs pointé.
x=new => modifie x
*x=*y => ne modifie pas x, modifie les cases mémoires pointées par x.
Il faut bien faire attention de quoi on parle et ce qui est modifié.
En toute logique, on ne fait pas de new sans un delete dans le même corps de fonction (Il y a bien sur plein d'exceptions, mais en général c'est explicite).
C'est le problème du C, à tout instant, ou presque, il faut jongler avec l'allocation mémoire. Plus de souci avec string, l'allocation est encapsulé dans la classe.
x=new => modifie x
*x=*y => ne modifie pas x, modifie les cases mémoires pointées par x.
Il faut bien faire attention de quoi on parle et ce qui est modifié.
En toute logique, on ne fait pas de new sans un delete dans le même corps de fonction (Il y a bien sur plein d'exceptions, mais en général c'est explicite).
C'est le problème du C, à tout instant, ou presque, il faut jongler avec l'allocation mémoire. Plus de souci avec string, l'allocation est encapsulé dans la classe.
axel50397
Messages postés
113
Date d'inscription
mercredi 8 août 2007
Statut
Membre
Dernière intervention
17 mars 2014
16
29 oct. 2010 à 22:24
29 oct. 2010 à 22:24
Merci beaucoup...
J'ai eu un peu de mal à comprendre, mais j'ai finis par faire des passages par référence.
++
J'ai eu un peu de mal à comprendre, mais j'ai finis par faire des passages par référence.
++