La fonction Malloc de la syntaxe en C
Dans les livres, j'ai lu que la syntaxe de la fonction malloc est malloc(sizeof(int)), mais dans l'un de liste doublement chaînée programme je vois les suivantes:
newnode=(struct node *)malloc(sizeof(struct node))
Qu'est-ce que (struct noeud*) en train de faire ici? Qu'est-ce que l'ensemble de ce code? btw, le code de la structure dans le programme ci-dessous.
struct node
{
char line[80];
struct node *next,*prev;
};
struct node *start=NULL,*temp,*temp1,*temp2,*newnode;
Merci
OriginalL'auteur Shy Student | 2013-03-21
Vous devez vous connecter pour publier un commentaire.
Le code est de créer dynamiquement un
pointer
à un seul type destruct node
. Dans la plupart des versions de C, le(struct node *)
cast n'est pas nécessaire, et certains prétendent qu'il ne devrait pas être utilisé. Si vous supprimez le casting, il sera unvoid*
, qui peut être utilisé pour n'importe quel type.Donc:
est à peu près équivalent à:
Voir: Plus précisément, ce qui est dangereux sur le casting de la suite de malloc?
Note 1: Si vous utilisez Visual Studio pour écrire votre code en C, il vous donnera rouge soulignant si vous ne lancez pas le résultat de
malloc
. Toutefois, le code de la compilation.Note 2: à l'Aide de
malloc
dans le code C++ vous oblige à jeter le résultat comme indiqué dans votre exemple.Correct. Il y a même eu beaucoup de débats sur le sujet ici sur plusieurs StackOverflow questions. Personnellement, je pense que la haine pour la coulée le retour de malloc est un peu exagéré.
Merci @Inisheer.. c'est exactement ce que je voulais savoir!! 🙂
Pas de problème 🙂
Il n'est pas exagéré. Si vous n'avez pas inclure l'en-tête correcte, vous auriez du casting de ce que le compilateur suppose une fonction qui renvoie
int
àstruct node*
. Masquant l'erreur. Il ne devrait pas être jeté sur cette ligne. Deuxièmement, la question est taggés avecC
, ce que le C++ n'a pas d'incidence ici. Troisièmement, un bug dans un compilateur (ou IDE) n'est pas une raison pour utiliser un mauvais code.OriginalL'auteur Inisheer
Vous avez couru dans un très mauvais code. C programmeurs ne jamais jeter un résultat de
malloc()
. Non seulement il n'est pas nécessaire, mais peut être nocif.C'est très confrontant, comme vous pouvez l'exécuter dans des problèmes similaires dans l'autre sens, regarde ici: securecoding.cert.org/confluence/display/seccode/...
merci u Argeman!!
OriginalL'auteur
Vous devez passer le nombre d'octets que vous souhaitez
malloc
à allouer comme argument. C'est pourquoi, dans cet exemple de code que vous utilisezsizeof(struct node)
direC
d'allouer le nombre d'octets nécessaires pour une struct nœud de variable. Casting le résultat est montré dans ce code est une mauvaise idée.OriginalL'auteur Ivaylo Strandjev
malloc renvoie un pointeur void .
(struct noeud*) effectue une conversion explicite de void pointeur vers la cible du pointeur de type
OriginalL'auteur Pradheep
"malloc" renvoie un void-pointeur. (struct noeud *) est de type casting de la suite de malloc pour un "nœud struct pointeur", qui est (undoubtibly) ce "newnode" est.
OriginalL'auteur Brad