Está inicializando un declarador de puntero con un comportamiento indefinido de puntero no válido?

n resumen, ¿se considera que el siguiente código tiene un comportamiento indefinido?

int main()
{
    int *p = <some invalid pointer value>;
}

Para un ejemplo de compilación, tome el siguiente código:

int main()
{
    int *p = new int;
    delete p; // Now p has an invalid pointer value.
    int *q = p; // UB?
}

He realizado algunas investigaciones sobre el tema, así que esta es la información relevante que he encontrado hasta ahora:

Un valor de puntero (según cppreference) puede ser uno de:

Un puntero a un objeto o función; Un puntero más allá del final de un objeto; El valor del puntero nulo; Un valor de puntero no válido.

También, de acuerdo con cppreference,

La dirección a través de un valor de puntero no válido y pasar un valor de puntero no válido a una función de desasignación tienen un comportamiento indefinido. Cualquier otro uso de un valor de puntero no válido tiene un comportamiento definido por la implementación.

Este hilo aborda algunos usos de punteros no válidos. Específicamente,esta respuesta menciona elDocumento racional (C99), que tiene el siguiente párrafo (sección 6.3.2.3):

ndependientemente de cómo se crea un puntero no válido, cualquier uso del mismo produce un comportamiento indefinido. Incluso la asignación, la comparación con una constante de puntero nulo, o la comparación consigo mismo, en algunos sistemas puede dar como resultado una excepción.

No estoy seguro de cuál es el estado de cosas para C ++, pero lo consideraría, dadas las respuestas en el hilo vinculado,uso de punteros inválidos resultan en un comportamiento indefinido. Tenga en cuenta, sin embargo, queasignació no es lo mismo que inicialización, así que no estoy seguro de que la inicialización se considere un uso.

Respuestas a la pregunta(1)

Su respuesta a la pregunta