Malloc en C

Fermé
asma - 12 mai 2014 à 19:24
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 12 mai 2014 à 22:23
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

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
12 mai 2014 à 19:28
'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
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
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
12 mai 2014 à 19:49
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
12 mai 2014 à 22:23
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