Malloc en C

asma -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
comment intialiser malloc en C avant d affecter le pointeur par sa valeur
int n,i;
float *p;

printf(" donner le nb de valeurs \n ");
scanf("%d",&n );

p=(float*) malloc(n*sizeof(float));

2 réponses

  1. ElementW Messages postés 5690 Statut Contributeur 1 293
     
    'lut. Pardon, je pige pas... On initialise pas
    malloc
    , on l'appelle, c'est tout!
    Si tu cherches à initialiser
    *p
    avant d'affecter sa valeur, tu fais juste
    float *p = NULL;
    0
    1. asma
       
      peut on ecrire
      if(p==null)? mais il ya eu eu erreur dans le code suivant pouquoi ?

      #include <stdio.h>
      #include <stdlib.h>
      void main()
      {
      int n,i;
      float *p;

      printf(" donner le nb de valeurs \n ");
      scanf("%d",&n );
      p=(float*)malloc(n*sizeof(float));
      if(*p==null)
      printf( " pas de place pour toutes ces valeurs \n");
      else for(i=0;i<n;i++,p++)
      p[i]=0;

      for(i=0;i<n;i++,p++)
      printf("%f \n ", p[i]);
      }
      0
    2. ElementW Messages postés 5690 Statut Contributeur 1 293
       
      Normal, ton
      if
      vérifie le contenu pointé par la variable
      p
      , et non
      p 
      elle-même.
      Mets
      if(p==null) 
      à la place.
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    void main()
    Le bon prototype est : int main(void)
    Et il ne faut pas oublier : return 0; en fin de main().

    p=(float*)malloc(n*sizeof(float));
    Pour info, le (float *) devant est complètement inutile. Et même déconseillé.

    if(*p==null)
    C'est l'adresse et non la valeur pointée qu'il faut vérifier. Et c'est NULL (pas null).
    Ce qui donne : if(p==NULL)

    for(i=0;i<n;i++,p++)
    p[i]=0;

    p++ ?? Que souhaites-tu faire ? Il faut faire attention car p++ et i++ donne : p[i+2];
    Soit tu fais p++, soit i++. Je te conseille ici de faire uniquement i++ sinon tu perds l'adresse du premier élément.
    De plus, tu peux utiliser la fonction memset() pour initialiser le tableau à 0. Ou encore plus simplement, tu peux utiliser calloc() à la place de malloc().
    0