Was ist der richtige Weg, um ein Array von Zeigern zu setzen?

8

Wenn ich Zeiger vom Typ T (T*) habe und ich ein Array von ihnen habe T* array[N] erlauben mir diese beiden Methoden später zu überprüfen, welche Einträge Nullzeiger sind, um Zeug in jedem Bucket zu initialisieren?

memset(array, 0, sizeof(T*)*N);

oder

%Vor%

d. Wird der Aufruf von memset auch später if (array[i] == NULL) ... ?

erlauben

Ich möchte nicht undefiniertes Verhalten einführen, wenn nicht ..

    
Palace Chan 04.10.2012, 21:09
quelle

2 Antworten

10

Obwohl ein Null-Zeiger-Wert technisch nicht erforderlich ist, sind alle Null-Bits. Ich kenne kein System, wo es nicht alle Null-Bits sind. Also sollte jede Methode funktionieren.

Es gibt jedoch einen einfacheren Weg, ein Array zu initialisieren, das die korrekten Nullzeigerwerte selbst bei einer bösen Implementierung setzt:

%Vor%

Oder wenn Sie es dynamisch zuweisen:

%Vor%     
bames53 04.10.2012, 21:14
quelle
2

Formal funktioniert die Methode memset nicht, da kein Nullzeiger durch den Wert 0 im Speicher dargestellt werden muss. In der Praxis funktioniert es gut.

Besser als beides: std::uninitialized_fill ; Der Standard-Bibliotheks-Implementierer kann Dinge tun, die Sie nicht optimieren können.

    
Pete Becker 04.10.2012 21:13
quelle

Tags und Links