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 :

allocation de mémoire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 142
    Par défaut allocation de mémoire
    Bonsoir,
    Pouvez-vous me dire si c'est comme ca qu'il faut faire pour utiliser malloc() ?
    Voici mon code sans malloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
             double complex w[N];
             int i_w;
                 for (i_w = 1; i_w <= N; i_w++){
                     w[i_w] = cos(i_w*PI/180) + I*sin(i_w*PI/180) ;
                 }
    avec malloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            double complex *w;
            w = (double*)malloc( N*sizeof(double*)); 
             int i_w;
                 for (i_w = 1; i_w <= N; i_w++){
                     w[i_w] = cos(i_w*PI/180) + I*sin(i_w*PI/180) ;
                 }
    d'avance merci

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    - Non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double complex *w;
    w = malloc( N*sizeof(double));
    - Tu cherches à allouer des double, pas des double *
    - En C le cast du retour du malloc() n'est pas obligatoire
    - Il convient de tester la valeur de retour du malloc() pour vérifier que l'allocation est réussie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(w!= NULL)....
    else ....

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (i_w = 1; i_w <= N; i_w++)
    Non, les indices commencent à 0 et leur maximum est N-1 (valable dans les deux cas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (i_w = 0; i_w < N; i_w++)

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 142
    Par défaut
    Merci diogene. Je pense qu'il faut mettre "complex"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    w = malloc( N*sizeof(double complex));
    sinon comment procéder dans le cas d'une matrice w[][] ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 102
    Par défaut
    perso je ferai comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    w = malloc( N*sizeof(*w));
    tu alloues la taille du type pointé sans te tromper

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par nant44 Voir le message
    Merci diogene. Je pense qu'il faut mettre "complex"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    w = malloc( N*sizeof(double complex));
    sinon comment procéder dans le cas d'une matrice w[][] ?
    Oui. J'étais un peu obnubilé par la présence de * et je n'ai pas fait suffisamment attention

    Pour w[][] voir la FAQ : Comment allouer dynamiquement un tableau à 2 dimensions ?

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 142
    Par défaut
    Merci. mais je ne sais pas vraiment pourquoi ca me donne une erreur "subscripted value is neither array nor pointer"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
             double complex *mtrx;
             mtrx = malloc(N * M * sizeof(*mtrx));

  7. #7
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 102
    Par défaut
    un conseil que je te donne, c'est de vérifier que ton opération:

    n'est pas trop grande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (N*M > SIZE_MAX/sizeof(*mtrx)){
           /* erreur, taille d'allocation trop grande */
    }

Discussions similaires

  1. [debutant] : Allocation de mémoire dynamique
    Par sam.fet dans le forum Langage
    Réponses: 5
    Dernier message: 15/02/2006, 14h58
  2. Problème d'allocation de mémoire dans la pile
    Par prophet666 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 19/01/2006, 02h22
  3. [Debutant]Allocation de mémoire
    Par gwendal84 dans le forum C
    Réponses: 6
    Dernier message: 07/12/2005, 19h04
  4. Double allocation de mémoire
    Par hunter001 dans le forum C++
    Réponses: 16
    Dernier message: 25/08/2005, 13h53
  5. pb d'allocation de mémoire
    Par shura dans le forum C
    Réponses: 7
    Dernier message: 17/04/2005, 21h10

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