IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Realloc et new compatible?


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 49
    Par défaut Realloc et new compatible?
    Bonjour a tous,
    Voila mon probleme, je dois agrandir la taille d'un tableau fait en C++ a l'aide d'un new. Je n'ai malheureusement pas le droit d'utiliser la STL et son beau vector, donc j'ai pensé utilisé realloc fonction C pour agrandir le dit tableau.
    Probleme j'ai une erreur de segmentation!

    Je voulais savoir si c'etait compatible, si je l'utilise bien et savoir s'il existe un autre moyen d'agrandir le tableau. J'ai aussi essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char* myTab;
    myTab=new char[10];
    //traitement
    delete [] myTab
    myTab=new char[100];
    mais ca ne marche pas...

    pour le realloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char* myTab;
    myTab=new char[10];
    //traitement
    myTab=realloc(myTab,nouvelle_taille);
    Donc si vous avez une idée autre que vector je suis preneur!
    Merci bien!

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Non, on ne peut pas utiliser realloc sur un pointeur retourne par new ou new[].

  3. #3
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char* myTab;
    myTab=new char[10];
    //traitement
    delete [] myTab
    myTab=new char[100];
    Ceci devrait marcher ( avec un point virgule en plus), mais cela détruit le tableau donc tes données sont perdues. Tu pourrais utiliser un tableau temporaire pour stocker les données. Evidemment, il y a peut être plus efficace, mais autant faire simple d'abord. Surtout si les tableaux ont l'ordre de grandeur que tu as indiqué, ça ne posera pas de problème particulier.

    http://cpp.developpez.com/faq/cpp/?p...NTEURS_realloc

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Et plus généralement, on ne donne pas des pointeurs aloué avec des "outils" du C++ a des outils venant du C et réciproquement.
    C'est à dire pas de free sur un pointeur alloué par new, pas de delete sur un pointeur alloué par malloc, ...
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Par défaut
    Dois tu obligatoirement passer par des tableaux? Un vecteur ne serait-il pas plus approprié? Quitte à le réécrire. Et comment peut on interdire quelqu'un d'utiliser la STL?

  6. #6
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Citation Envoyé par Floréal Voir le message
    Et comment peut on interdire quelqu'un d'utiliser la STL?
    C'est simple. S'il le fait le prof (ou formateur, etc...) donne une mauvaise note.

    Facile hein ?

    Je pense (ou plutot j'espère) que le prof pourra ainsi lui montrer que la STL avec son vector par exemple est bien plus pratique que de vouloir redimensionner soi-même sont tableau. S'il n'a jamais vu cette méthode il n'en verra que moins bien l'utilité du std::vector.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je crois que l'opérateur new avec placement est capable de le faire, voir le Méga cours C++ tout en haut de la page des tutos.

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Le new de placement n'alloue rien. Bien au contraire.
    Par contre effectivement, si tu utilises les *alloc() du C (ou autre) pour la mémoire et le new de placement pour les constructions ... tu réinventes std::vector -- ce qui est peut-être justement le but de l'exo. Qui sait?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Re-problème avec realloc() (désolé)
    Par Yabo dans le forum C
    Réponses: 8
    Dernier message: 30/07/2003, 22h07
  2. [TP]Editeur de fichiers HLP compatibles 16 bits
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 08/07/2003, 21h03
  3. Bug new build ??
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 31/01/2003, 10h30
  4. [] Insérer DE et Datareport existant ds new projet
    Par khany dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/01/2003, 09h52
  5. Réponses: 4
    Dernier message: 03/12/2002, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo