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) ...
?
Ich möchte nicht undefiniertes Verhalten einführen, wenn nicht ..
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% 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.