[C] Existiert etwas wie: is_nullpointer(*pointer)?

mc_gulasch

Erfahrenes Mitglied
HI Pros,

ich bin grad verzweifelt auf der Suche, nach einer Funktion, die mir bool´sch zurück gibt, ob ein Wert ein Null-Pointer ist, oder nicht.
Sinn der Sache ist, dass ich viele verschiedene Matritzen durchgehe, die wiederum über einen reinen Adressen-Array angesteuert werden, was im Endeffekt heisst, dass ich keinerlei Ahnung über die Größ oder die Belegung der Matrizen habe. Ein Beispiel:

Index[123] -> zeigt auf Adresse 456
"Inhalt von 456" ist wiederum ein Vektor. Es kann allerdings sein, dass der Vektor von 456+1 auch noch dazuzählt und ich den auch noch Abfragen muss, was wiederum vom Wert "456[2]" bzw. (456+1)[2], abhängt, FALLS existent und genau da hab ich das Problem, dass ich eben nie weiß, ob 456+1 bzw. (456+1)[2] überhaupt existiert.

Danke schonmal!
 
Hallo,

ein Nullpointer ist ein Zeiger, der auf 0 zeigt. Daher sollte es die Abfrage pointer == 0 tun. Vermutlich ist das aber nicht das, was du meintest. Wenn du wissen willst, ob an einer bestimmten Stelle im Speicher ein gültiger Zeiger steht, dann musst du da schon selber Hand anlegen – C oder irgendeine Funktion können dir diese Arbeit vermutlich nicht abnehmen. Was allerdings möglich sein sollte: mit sizeof(pointer) kann man die Länge eines Arrays in Byte ermitteln. Die Info allerdings ohne Gewähr, da ich mir nicht wirklich sicher bin :) Wenn da jemand genauer bescheid weiß, möge er mich korrigieren.

Grüße,
Matthias
 
Das ist jetzt echt die Frage, was ich da brauche. Ich komme eigentlich aus der JAVA-Ecke und bin eben sowas wie "==0" gewöhnt. Jetzt versuche ich eigentlich etwas wie:
Code:
unsigned int** table[256]={0};
int j = 0;
...
if (*(*(table[i])+2+j))==0)
 j++;
Aus mir unerfindlichen Gründen, sagt er mir aber erstmal, dass er eben
Code:
 *(*(table[i])+2+j)
nicht lesen kann, bevor er es auf 0 prüft...naja, mal schauen, was mir noch so einfällt.
Sizeof() bringt mich hier leider nicht weiter.
 
Hallo,

An der Adresse table[ i ] wird wohl immer 0 stehen – so hast du dein Zeigerarray ja initialisiert. Deswegen schlägt auch das Dereferenzieren an dieser Stelle schon fehl.

Grüße,
Matthias
 
Ok, bin mir nicht sicher, ob es das ist, was ich gemeint habe. Im Endeffekt ist der Table ja nur ein pointer auf nen pointer, also auf ne Adresse.
Abgesehen davon, wenn ich die Abfrage ==0 mache, müsste es doch dann laufen.
Ich hab´s nicht mehr ausprobiert, bin mir aber eigentlich sicher, dass es eigentlich so gehen müsste, wie ich es anfangs versucht habe.
Der Fehler bei mir lag woanders und zwar dass meine Indizierung ohnehin schon am Ende war und logischerweise jede weitere Abfrage tatsächlich ins Nirvana und nicht auf '0' zeigt.
Danke trotzdem
 
Zurück