static void* array[1024] = {0};
o, como kmkaplan señala en el comentario, simplemente:
static void* array[1024];
aunque me quedo con la primera solución sólo para recordar que está configurado en ceros (el compilador no debe generar ningún código para esto a menos que esté muerto cerebralmente).
No es necesario establecer el memset en absoluto ya que las variables de nivel de archivo se inicializan a cero de todos modos.
Si necesita restablecer a NULL en algún momento después del arranque, utilice:
memset(array, 0, sizeof(array));
Esto funciona en la mayoría de las plataformas (cada uno que he visto nunca y eso es mucho), ya que la el puntero nulo suele ser cero bits. Sin embargo, la norma no garantiza de este modo, en esas plataformas oscuros, es más seguro que hacer:
for (i = 0; i < sizeof(array)/sizeof(void*); i++)
array[i] = NULL;
Tengo curiosidad: ¿cuál es un ejemplo de un sistema para el cual el puntero 0x00 es válido? – Crashworks
Nunca he visto uno (incluso los integrados), @Crashworks, pero el estándar dice que son posibles, por lo que es una buena idea permitirlo si existe la posibilidad de que su software se ejecute allí. El pragmatismo me permite ignorar cómodamente esa regla :-) – paxdiablo
@Crashworks: ver http://www.lysator.liu.se/c/c-faq/c-1.html#1-14 – Christoph