¿Cuál es el propósito de asignar una cantidad específica de memoria para matrices en C ++?

Soy un estudiante que toma una clase sobre estructuras de datos en C ++ este semestre y me encontré con algo que no entiendo esta noche. Digamos que debía crear un puntero a una matriz en el montón:

int* arrayPtr = new int [4];

Puedo acceder a esta matriz usando la sintaxis del puntero

int value = *(arrayPtr + index);

Pero si tuviera que agregar otro valor a la posición de memoria inmediatamente después del final del espacio asignado para la matriz, podría acceder a ella

*(arrayPtr + 4) = 0;
int nextPos = *(arrayPtr + 4);
//the value of nextPos will be 0, or whatever value I previously filled that space with

La posición en la memoria de * (arrayPtr + 4) ha pasado el final del espacio asignado para la matriz. Pero por lo que yo entiendo, lo anterior aún no causaría ningún problema. Entonces, aparte de ser un requisito de C ++, ¿por qué incluso darles a las matrices un tamaño específico al declararlas?

Respuestas a la pregunta(5)

Su respuesta a la pregunta