Dev - C++ - problema por diferencia C a C++

 
Vista:

problema por diferencia C a C++

Publicado por lupulus (1 intervención) el 25/01/2007 19:45:37
Alguien me puede explicar por qué, o cómo se produce el siguiente error en tiempo de ejecución:

void f()
{
char * p="Plato";
p[4]='e'; //error en tiempo de ejecución, violación del acceso a memoria
}

Según Stroustrup es un error intentar modificar un string literal mediante un puntero en C++, pero según mi forma de pensar no le veo sentido, sencillamente no lo entiendo. Podría ser que estemos intentando modificar un const char, pero entonces el error sería en compilación, y me sorprende que lo de en ejecución, cuando solo tiene que modificar un elemento bien referenciado de la memoria. No lo entiendo

¿Alguién me puede aclarar esto? Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema por diferencia C a C++

Publicado por Tom (65 intervenciones) el 26/01/2007 12:19:07
Bueno, "Plato" está bien referenciado en la memoria (en algo así como una tabla de cadenas en tu programa) lo que no quiere decir que tengas permiso para escribir ahí (lo más posible es que esté en el segmento de código).

Para ver la diferencia, prueba este programilla:
#include <stdio.h>
/* */
int main(int argc, char* argv[]) {
char pp[10] = "Periquito";
char *p = "Perico";
printf("main: %p\n", main);
printf("p: %p\n", p);
printf("p[0]: %p\n", &p[0]);
printf("pp: %p\n", pp);
printf("pp[0]: %p\n", &pp[0]);
pp[4] = 'a';
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar