wenn einem Zeiger Speicher per malloc () zugeteilt wird ist er dann automatisch kein Nullzeiger mehr ?
-
Unten ist ein Excerpt eines Codes; Meine Annahme ist , dass die if Schleife jetzt weil newNode per malloc()Funktion Speicher erhalten hat und somit nicht mehr als NULL also NULLzeiger gilt, oder ? Thx for help !!!!
... node *newNode = NULL; newNode = (node *)malloc(sizeof(node)); if(newNode != NULL) ....
-
Wenn du dir mal die Referent/man-Page zu malloc durchliest, wirst du einen Absatz über den Rückgabewert finden:....
malloc schrieb:
If the function failed to allocate the requested block of memory, a null pointer is returned.
Das ist also eine Fehlerabfrage, denn dir kann der Speicher auch verwehrt werden.
Und ja, wenn ein Zeiger einen anderen Wert als NULL erhält, ist er demnach kein NULL-Zeiger mehr.
NULL ist eine Vereinbarung für "ungültiger Zeiger", da die Adresse 0 auf realen Computern immer in speziellen Bereichen liegt (Zeropage oder Interrupttabelle oder Resetvektor oder BIOS oder ...)
Und noch etwas zur if-Schleife
-
DirkB schrieb:
Und noch etwas zur if-Schleife
Die Seite werde ich weiterempfehlen
Um das ganze mal an einem Beispiel zu demonstrieren:
#include <stdlib.h> // malloc #include <stdio.h> // puts, printf // Program entry main(){ // Pointer declaration int *p; // Allocate memory and assign memory address to pointer if(p = (int*)malloc(sizeof(int) * 100)) puts("SUCCESS"); else puts("FAILURE"); // Output pointer value printf("Address: %p", p); }
Wenn du die Zahl in Zeile 9 in lächerliche Höhen treibst, wirst du schon sehen, wie die Speicheranforderungen schief laufen kann.
-
Deine Frage wurde doch bereits hier von dir gestellt und beantwortet:http://www.c-plusplus.net/forum/319128
-
Den Speicher fordertst du besser so an:
p = malloc(sizeof(*p) * 100);
Der Cast (int
ist in C unnoetig.
Und man nimmt besser sizeof(*p) anstatt sizeof(int), denn wenn man den Typ von p aendert, dann muss man nicht alle mallocs anpassen.
-
Danke euch allen. Die Sache ist mir jetzt klarer !