Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Duda zona de memoria puntero

Estas en el tema de Duda zona de memoria puntero en el foro de C/C++ en Foros del Web. Hola, Me han hecho la siguiente pregunta y la verdad es que no se la respuesta correcta. Me podéis ayudar? Dónde se almacena la cadena ...
  #1 (permalink)  
Antiguo 24/06/2013, 11:09
 
Fecha de Ingreso: noviembre-2008
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 1
Duda zona de memoria puntero

Hola,

Me han hecho la siguiente pregunta y la verdad es que no se la respuesta correcta. Me podéis ayudar?

Dónde se almacena la cadena de caracteres a la que apunta el puntero:
char *texto = "Un texto cualquiera";

En la pila, en una zona de sólo lectura, en una zona de sólo escritura ó en una zona de lectura y escritura???

Gracias por anticipado.
  #2 (permalink)  
Antiguo 24/06/2013, 14:52
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Duda zona de memoria puntero

Hola Vera.

Entiendo que la constante literal, en el segmento de datos.

Saludos. :)
  #3 (permalink)  
Antiguo 24/06/2013, 15:58
 
Fecha de Ingreso: noviembre-2008
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Duda zona de memoria puntero

Hola,

Muchas gracias por responder. Pero entonces cual es la respuesta? Necesito una de las cuatro opciones que pongo.

Gracias nuevamente.
  #4 (permalink)  
Antiguo 24/06/2013, 16:43
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda zona de memoria puntero

1. Es memoria que esta en la pila. En algunas arquitecturas en la ROM.
2. Ese string ese string es conocido como "string literal".
3. Es solamente de lectura.

Ejemplo:
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.     char *s1 = "Hola mundo";
  6.     s1[0] = 'a';
  7.     printf("%s", s1);
  8.     return 0;
  9. }
Si corres este ejemplo, si compila pero te da:

Código:
Segmentation fault (core dumped)
  #5 (permalink)  
Antiguo 25/06/2013, 00:23
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: Duda zona de memoria puntero

Explico brevemente. La mayoría de compiladores sitúan las cadenas en secciones de sólo lectura, en el caso de de ejecutables portables de Windows (PE): [1]
  1. .data que contiene los datos inicializados. Es de lectura y escritura.
  2. .idata que contiene datos importados. Es evidentemente de lectura y escritura.
  3. .edata que contiene datos para exportar. Sólo es de lectura.
  4. .rdata que contiene datos inicializados de sólo lectura. Aquí es donde se introducen las cadenas que no se modifican en tiempo de ejecución, como la de tu ejemplo.
  5. .pdata que contiene datos de excepción. Sólo lectura.
  6. .rsrc que contiene datos de recursos de diversa índole. Es de sólo lectura.

En el caso de ejecutables ELF de unix: [2]
  1. .data y .data1 que contiene datos inicializados. Escritura y lectura.
  2. .rodata y .rodata1 que contiene datos inicializados. Sólo lectura. Aquí se suelen colocar las cadenas.

Esto es un ejecutable PE y las secciones de las cadenas, hay algunas que se observan en la sección de sólo lectura .rdata y otras en .data.



Un saludo.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Última edición por dontexplain; 25/06/2013 a las 00:43
  #6 (permalink)  
Antiguo 25/06/2013, 11:52
 
Fecha de Ingreso: noviembre-2008
Mensajes: 13
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Duda zona de memoria puntero

Muchísimas gracias, ya me quedó todo claro.

Etiquetas: memoria, puntero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:02.