allocation dynamique c/c++
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

allocation dynamique c/c++



  1. #1
    invite38a6a978

    allocation dynamique c/c++


    ------

    Bonjour à tous!

    grand débutant
    soft: visual basic c++ 6.0

    J'ai réalisé un programme qui lit un fichier texte qui contient x lignes et 3 colonnes. Je récupère les données lu dans un tableau. Puis je les traite à ma guise. Pour cela j'ai besion d'autres tableaux. En moyenne, mon fichier texte contient 900 lignes. Au départ, je travaillais avec des tableaux déclarés classiquement quand j'avais moins de 100 lignes et là je n'avais pas de soucis. Avec 900 lignes je suis passé à l'allocation dynamique (je ne ss pas encore très à l'aise avec) et je n'ai aucune erreur de compilation, ni de construction pourtant quand j'exécute je ne peux tjrs pas lire un nombre de lignes important. Y'a t-il des erreurs dans la déclaration de mes tableaux? si oui lesquels? est ce que le problème est ailleurs? dernière question: est ce que vous pensez qu'une version moins archaïque de visual évite de ce genre de pb?

    Voici comment je procède:

    //extrait main

    int main( int argc, char *argv[])

    {
    double **XYZ = NULL; //Tableau X, Y, Z (c-à-d mes 3 colonnes)
    double *dPath= NULL; // longueur totale
    double **dInstPath = NULL; //longueur trajet#
    double **dInsVitesse = NULL; //vitesse instantanée
    double *dX = NULL;
    double *dY = NULL;
    int nblignes = 0;
    int nbcolonnes = 0;

    ifstreamf("fichier.txt");

    //Définir nb lignes et de colonnes

    printf("combien de lignes?\n");
    scanf("%4d",&nblignes);
    printf("combien de colonnes?\n");
    scanf("%4d",&nbcolonnes);

    //L'ouverture est elle possible?

    //Si non

    if (!f.is_open())cout<<"Impossibl e d'ouvrir le fichier en lecture"<<endl;

    //Si oui

    else
    {
    //Allocation

    XYZ = (double**) malloc (nblignes*sizeof(int));
    dInstPath = (double**) malloc (nblignes*sizeof(int));
    dInstVitesse = (double**) malloc (nblignes*sizeof(int));
    dX = (double*) malloc (nblignes*sizeof(int));
    dY = (double*) malloc (nblignes*sizeof(int));
    dPath = (double*) malloc (nblignes*sizeof(int));
    for(i=0;i<nblignes;i++)
    {
    XYZ[i]= (double*) malloc(nbcolonnes * sizeof(int));
    dInstPath[i]= (double*) malloc(nbcolonnes * sizeof(int));
    dInstVitesse[i] = (double*) malloc(nbcolonnes * sizeof(int));
    }

    //Envoyer données .txt vers tableau XYZ[][]

    for(i=0;i<nblignes;i++)for(j=0 ;j<nbcolonnes;j++)f>>XYZ[i][j]; //Mon tableau se remplit tjrs sans soucis qqsoit le nombre de lignes de XYZ c'est après que ça plante.

    }
    //Fermer le fichier une fois les données récupérées
    f.close();

    // Les autres tableaux me servent à traiter mes données puis je copie le traitement ds un nouveau fichier texte.
    .............................. .....
    // Je libère la mémoire

    free(XYZ);
    free(dPath); //idem pr ts les tableaux
    ......
    return 0;
    }

    ps: dsl pr les balises

    -----

  2. #2
    inviteb9f49292

    Re : allocation dynamique c/c++

    Plusieurs problèmes:
    XYZ = (double**) malloc (nblignes*sizeof(int));
    devrait être:
    Code:
    XYZ = (double**) malloc (nblignes*sizeof(double*));
    puisque tu alloues bien un tableau de pointeurs sur "double" (donc un tableau de "double*")
    Tu fais la même erreur dans ta boucle d'allocation de chaque ligne, et là c'est nettement plus grave, puisque un "int" sur x86 c'est 4 octets, alors qu'un double c'est 8...
    Enfin pour la libération de la mémoire, tu ne libères quasiment rien... Te rappelles tu du prof qui disait "1 malloc = 1 free", et bien ce n'est pas ce que tu fais.... Il faut que tu désalloues lignes à lignes, puis tu désalloues ton tableau de pointeurs de lignes.

    C'est après une lecture rapide, la liste des erreurs n'est peut-être pas exaustive...

  3. #3
    JPL
    Responsable des forums

    Re : allocation dynamique c/c++

    Lt972 : la balise code permet de poster du code en gardant son indentation.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

Discussions similaires

  1. Dérogation Allocation de Recherche
    Par invitecf4c1642 dans le forum Orientation après le BAC
    Réponses: 6
    Dernier message: 11/12/2007, 16h58
  2. Allocation de recherche INSERM
    Par invite91e82999 dans le forum Orientation après le BAC
    Réponses: 10
    Dernier message: 14/09/2007, 10h43
  3. allocation memoire sous windows 32 bits
    Par invite011aeb2f dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 08/10/2006, 22h01
  4. ATER et allocation perte d'emploi
    Par inviteacc0e9c9 dans le forum Orientation après le BAC
    Réponses: 4
    Dernier message: 01/02/2006, 19h16
  5. allocation d'un tableau 3 dimensions
    Par invitefc5b3186 dans le forum Logiciel - Software - Open Source
    Réponses: 12
    Dernier message: 03/08/2004, 19h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...