Tengo una muy simple código C++ aquí: (. Violación de Acceso)La eliminación de punteros borrados siempre da como resultado una Infracción de acceso?
char *s = new char[100];
strcpy(s, "HELLO");
delete [] s;
int n = strlen(s);
Si funciono el código de Visual C++ 2008 pulsando F5 (Iniciar depuración,) este siempre resulta en accidente Sin embargo, a partir este ejecutable fuera del IDE, o usando el del IDE Ctrl + F5 (Inicio sin depuración) no causa ningún bloqueo. ¿Cuál podría ser la diferencia?
También quiero saber si es posible reproducir de forma estable el bloqueo de infracción de acceso causado por el acceso al área eliminada. ¿Es este tipo de choque raro en la vida real?
Produce un comportamiento indefinido, lo que significa que el programa puede hacer lo que quiera. Sin embargo, es un poco extraño que no se cuelgue fuera del depurador. ¿Qué sucede realmente? Si se trata de un programa de consola, ¿cuál es el resultado? –
Cuidar los indicadores borrados es realmente un problema. Es por eso que debería usar 'std :: vector' o en este caso particular' std :: string' en lugar de 'new []'. Nunca deberías tener que usar 'delete'. – avakar
El ejemplo de código es un recorte de la aplicación real. Estoy reproduciendo un error que rara vez ocurre, probablemente solo cuando un hilo hace el 'eliminar' y otro hace la desreferencia. Por lo tanto, quiero una forma estable de reproducir esto. Y SO no me falló con todas estas útiles respuestas :) – Gant