¿Dónde reside el puntero de caracteres en la memoria, ROM o RAM? [cerrado]

0

Estoy ejecutando Embedded C en algunos objetivos ARM Cortex-M4 que facilitan la compatibilidad con ROM y RAM. Tengo un puntero de carácter en mi código:

char *temp = "";

Más adelante en el código estoy modificando la variable como:

itoa(some_integer, temp, 10);

Cuando compilo el código, el compilador pone * temp en la sección de ROM, lo que hace que se genere una excepción al intentar realizar la operación itoa (,) ya que la variable constante no se puede modificar. Mi pregunta es por qué el compilador está poniendo char * temp en la sección ROM ?

    
pregunta Ameer Hamza

1 respuesta

3
  

Mi pregunta es por qué el compilador está poniendo char * temp en la sección ROM?

No lo es. Si no me crees, prueba este temp = NULL; . Eso se ejecutará bien, demostrando que temp se almacenó en la RAM, no en la ROM. Como temp es una variable, puede cambiar su valor.

Lo que se almacenó en la ROM era "" , una cadena vacía. Dado que el valor de "" no puede cambiar, al igual que el valor de 3 no puede cambiar, tiene sentido almacenarlo en la ROM.

Entonces, ¿qué está mal con:

itoa(some_integer, temp, 10);

En este punto, temp apunta a la cadena literal "" . Estás intentando cambiar los puntos a los que temp . Pero los literales son constantes, y temp apunta a una constante. Así que estás tratando de cambiar una constante. Pero no puedes cambiar una constante, eso es lo que la hace constante.

Entonces, temp es una variable, y puede cambiar su valor. Pero apunta a una constante. Así que no puedes cambiar el valor de lo que apunta.

    
respondido por el David Schwartz

Lea otras preguntas en las etiquetas