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 :

[C, Realloc] problème de reallocation


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut [C, Realloc] problème de reallocation
    Bonjour à tous,

    Voici le code sur lequel je travaille et sur lequel je bloque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    (*c)->contraintes = (double **)realloc((*c)->contraintes, sizeof(double*)*((*c)->nb_contraintes + 2));
    (*c)->contraintes[((*c)->nb_contraintes)+1] = (double *)malloc(sizeof(double)*(1+(int)(*c)->fonction_economique[0]));
            (*c)->contraintes[((*c)->nb_contraintes)+1][0]=(*c)->contraintes[contrainte][0];
     
            for(i=1; i<((*c)->contraintes[contrainte][0]);i++)
            {
                //si le terme traité n'est pas le signe de la contrainte
                if(i != (int)((*c)->contraintes[contrainte][0]-2))
                {
                    ((*c)->contraintes[contrainte][i]) = ((*c)->contraintes[contrainte][i]) * -1.00;
                    (*c)->contraintes[((*c)->nb_contraintes)+1][i] = (*c)->contraintes[contrainte][i];
                }    
                //sinon si c'est le signe qui est traité
                else
                {
                    (*c)->contraintes[contrainte][i] = -1;
                    (*c)->contraintes[((*c)->nb_contraintes)+1][i] = -1;
                }    
     
            }  
     
            (*c)->nb_contraintes++;
            printf("toto\n");
            printf("test : %.f \n",(*c)->contraintes[((*c)->nb_contraintes)+1][1]);
            printf("test2 : %.f \n",(*c)->contraintes[(*c)->nb_contraintes+1][2]);
    Il me fait des erreures au niveau des printf, juste apres avoir affiché toto.
    le tableau (*c)->contraintes est un tableau a deux dimensions de double.
    (*c)->nb_contraintes est un int.

    Je veux reallouer une ligne puis remplir la derniere ligne ajoutée. Mais cela ne semble pas marcher, la premiere valeure ((*c)->contraintes[(*c)->nb_contraintes+1][0]) est remplie correctement et je peux l'afficher.
    Et (*c)->fonction_economique[0] vaut 3.

    Je vous remercie de toutes les réponses que vous pourrez m'apporter.

    Sam

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par samtheh
    Voici le code sur lequel je travaille et sur lequel je bloque :
    Code incomplet (non compilable).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Le problème c'est que je ne pourrais pas mettre tout le code,
    il comporte plusieurs centaines de lignes.

    Le problème se situe au niveau du realloc, et donc juste sur ce petit bout de code. Il y a un problème, comme si il ne rajoutais pas la mémoire. Je voudrais donc votre aide sur le realloc bien particulier, puisque c'est pour rajouter une ligne dans une matrice de type double.

    Merci de l'aide que vous pourrez m'apporter.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par samtheh
    Le problème c'est que je ne pourrais pas mettre tout le code,
    il comporte plusieurs centaines de lignes.
    Dans ce cas, il suffit de réduire le code au minimum compilable montrant le problème.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Ca y est j'ai trouvé mon erreure, j'incrémentais mon indice entre temps donc je lui demandais d'afficher une case mémoire qui n'existait effectivement pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     (*c)->nb_contraintes++;
            printf("toto\n");
            printf("test : %.f \n",(*c)->contraintes[((*c)->nb_contraintes)+1][1]);
    Alors qu'il fallait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
             printf("toto\n");
            printf("test : %.f \n",(*c)->contraintes[((*c)->nb_contraintes)+1][1]);
            
    (*c)->nb_contraintes++;
    Merci en tout cas d'avoir pris la peine de lire mes problèmes.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    J'ai a nouveau un problème, dès que je refais un malloc à la suite de l'execution de ce realloc, mon programme s'arrete, sans aucune erreure.

    Si l'execution du realloc ne se fait pas j'ai aucun problèmes.

    J'ai essayé de faire des malloc en différents endroits après execution du realloc, même résultat : arret du programme sans erreure. Je précise que les malloc testé après le realloc ne sont en rien commun à la structure de donnée du realloc. Sur un simple pointeur test, d'un autre type de données, un malloc fait arreter le programme.

    Quelqu'un a une idée ?
    Peut-on refaire un malloc à la suite d'un realloc sans que cela ne pose de problèmes ?

    Je vous remercie des idées que vous pourrez me soumettre.

    Sam

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par samtheh
    J'ai a nouveau un problème, dès que je refais un malloc à la suite de l'execution de ce realloc, mon programme s'arrete, sans aucune erreure.

    Si l'execution du realloc ne se fait pas j'ai aucun problèmes.

    J'ai essayé de faire des malloc en différents endroits après execution du realloc, même résultat : arret du programme sans erreure. Je précise que les malloc testé après le realloc ne sont en rien commun à la structure de donnée du realloc. Sur un simple pointeur test, d'un autre type de données, un malloc fait arreter le programme.

    Quelqu'un a une idée ?
    Peut-on refaire un malloc à la suite d'un realloc sans que cela ne pose de problèmes ?

    Je vous remercie des idées que vous pourrez me soumettre.
    Ca m'a pas l'air très construit comme programmation. Encore du codage à la hache (variante de 'à l'arrache)!

    (Force 7 sur l'Echelle de Goret qui en compte 10).

    On ne met pas des realloc() ou des malloc() comme ça au hasard dans le code en regardant où ça pète. Il faut réfléchir avant. Définir ses besoins, ecrire l'algo, le vérifier sur le papier, le coder, et le vérifier en vrai. En principe, il n'y a pas de suprise.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 87
    Par défaut
    realloc et malloc ne sont aucunement conflictuels, comme le dit Emmanuel, deroule ton algo sur papier sur des entrees restreintes et porte une attention particuliere a tes allocations/desallocations, et aux lignes qui manipulent des pointeurs.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Mon algorithme a été écrit sur papier et travaillé auparavant.
    Merci pour l'echelle ca fait toujours plaisir

    Mon algorithme fonctionne parfaitement lors de la non execution du realloc, a partir du moment ou il est excuté au malloc suivant il plante.

    Mes allocations et desallocations ont été toutes revérifiées plutot 3 fois qu'une.

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par samtheh
    Mon algorithme fonctionne parfaitement lors de la non execution du realloc, a partir du moment ou il est excuté au malloc suivant il plante.

    Mes allocations et desallocations ont été toutes revérifiées plutot 3 fois qu'une.
    OK.

    Tant que tu ne postes pas un code réduit au minimum montrant le problème, je ne vois pas ce qu'on peut faire... Ton code doit être compilable.

Discussions similaires

  1. Problème avec realloc
    Par darkwall_37 dans le forum Débuter
    Réponses: 28
    Dernier message: 10/12/2009, 17h37
  2. Réponses: 13
    Dernier message: 21/03/2009, 20h49
  3. Problème avec realloc et struct
    Par _SamSoft_ dans le forum Bibliothèque standard
    Réponses: 38
    Dernier message: 27/12/2007, 10h13
  4. problème de realloc()
    Par daweed dans le forum C
    Réponses: 11
    Dernier message: 02/03/2007, 13h54
  5. Re-problème avec realloc() (désolé)
    Par Yabo dans le forum C
    Réponses: 8
    Dernier message: 30/07/2003, 22h07

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