Malloc syntax in C
In den Büchern, die ich gelesen, dass die syntax für malloc ist malloc(sizeof(int)), aber in einer doppelt verknüpften Liste das Programm, sehe ich die folgenden:
newnode=(struct node *)malloc(sizeof(struct node))
Was (struct Knoten*) hier tun? Was ist dieser ganze code macht? btw, der code für die struct in das Programm ist als unten.
struct node
{
char line[80];
struct node *next,*prev;
};
struct node *start=NULL,*temp,*temp1,*temp2,*newnode;
Danke
InformationsquelleAutor Shy Student | 2013-03-21
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den code dynamisch erstellen einer
pointer
auf eine einzige Art vonstruct node
. In den meisten Versionen von C, die(struct node *)
cast ist nicht erforderlich, und einige argumentieren, dass es nicht verwendet werden sollte. Wenn Sie das entfernen der Besetzung, es wird einvoid*
, die verwendet werden können für jede Art.Daher:
ist etwa äquivalent zu:
Finden Sie unter: Speziell, was ist gefährlich über casting-das Ergebnis von malloc?
Hinweis 1: Wenn Sie mithilfe von Visual Studio zum schreiben von C-code, wird es geben, Sie rot zu unterstreichen, wenn Sie nicht gegossen das Ergebnis
malloc
. Allerdings wird der code noch kompilieren.Hinweis 2: Mit
malloc
im C++ - code erfordert, dass Sie die Besetzung das Ergebnis, wie gezeigt, in Ihrem Beispiel.Richtig. Es hat sich auch schon viel Diskussion über das Thema hier auf einige StackOverflow-Fragen. Ich persönlich glaube, dass der Hass casting für die Rückgabe von malloc ist ein bisschen übertrieben.
Danke @Inisheer.. das war genau was ich wissen wollte!! 🙂
Kein problem 🙂
Es ist nicht übertrieben. Wenn Sie nicht mit dem richtigen header, würde Sie Gießen, was der compiler übernimmt eine Funktion, die zurückgibt
int
zustruct node*
. Effektiv versteckt die Fehler. Es sollte kein cast auf die Linie. Zweitens, die Frage ist getaggt mitC
, was C++ macht, hat keinen Einfluss hier. Drittens, einen Fehler im compiler (oder eine IDE) ist kein Grund, schlechten code.InformationsquelleAutor Inisheer
Sie lief in einem sehr schlechten code. C-Programmierer nie geworfen ein Ergebnis von
malloc()
. Es ist nicht nur nicht erforderlich, sondern kann schädlich sein.Dies ist höchst diskutabel, wie Sie können, laufen Sie in ähnliche Probleme wie die anderen herum, schau mal hier: securecoding.cert.org/confluence/display/seccode/...
danke u Argeman!!
InformationsquelleAutor
Sollten Sie pass die Anzahl der bytes, die Sie wollen
malloc
zuweisen als argument. Das ist der Grund, warum in diesem code-Beispiel, das Sie verwendensizeof(struct node)
sagenC
zu reservieren, die Anzahl der bytes, die benötigt werden für eine struct Knoten-variable. Casting-das Ergebnis ist in diesem code dargestellt ist schlechte Idee übrigens.InformationsquelleAutor Ivaylo Strandjev
malloc gibt einen void-Zeiger .
(struct Knoten*) ist eine explizite Konvertierung von void-Zeiger auf die Ziel-Zeiger-Typ
InformationsquelleAutor Pradheep
"malloc" liefert einen void-Zeiger. (struct Knoten *) ist vom Typ-casting, das Ergebnis von malloc zu einem "Knoten struct-pointer", die (undoubtibly), was "newnode" ist.
InformationsquelleAutor Brad