Imagínate un arreglo de enteros... aunque no asignes ningún valor, el arreglo va a tener enteros en todas sus posiciones.... es lo que se conoce como basura. ¿Cómo determinas si el valor de un arreglo es válido o no? No puedes.
Aún inicializando el arreglo (el valor que se suele poner por defecto es 0). Si te encuentras un 0 en un momento dado, ¿podrías determinar si ese valor es válido o no? pues básicamente depende de si el 0 forma parte del rango válido de valores o no. En el caso más genérico, cualquier valor que te encuentres en el arreglo será válido.
¿Cual es la solución entonces?
Una de ellas es agrupar los valores válidos al inicio del arreglo y disponer de una variable entera que indique el número de posiciones del arreglo que tienen un valor válido:
Código C++:
Ver originalstruct Lista
{
int* arreglo;
int numElementos;
int maxElementos;
};
La tercera variable sirve para saber cuando el arreglo está lleno y no pasarse.
PD.: es responsabilidad del programador asignar los valores correctos a estas variables en todo momento, no hay ningún mecanismo en C que los vaya a rellenar por ti.
Un saludo.