Mi código es como abajo:C++ problema de asignación de memoria
#include <string.h>
int main()
{
int ii = 123;
char str[7] = "";
strcpy(str,"123456");
return 0;
}
corro esto en VS2010, la memoria es como a continuación
Tengo curiosidad por lo que el cc
en la memoria utilizada ¿para? ¿Y cómo se calcula el número de cc
?
¿Y por qué MS eligió '0xCC' como el valor de relleno? Porque '0xCC' es la instrucción de punto de interrupción de un solo byte en el conjunto de instrucciones x86. De esta forma, si accidentalmente ejecuta la memoria no cargada, alcanzará un punto de interrupción instantáneamente. –
@Rob Eso no lo sabía. :) Supongo que es de menor relevancia ahora que tenemos protección de memoria? – Mysticial
@Mysticial: no realmente: eso solo funciona en un nivel de página (una página entera puede marcarse como ejecutable o no, y solo si la CPU, el sistema operativo y el proceso aceptan habilitar el NX-bit). ¿Pero qué pasa si usa 40 bytes de código de una página de 2KB? La página debe estar marcada como ejecutable, lo que deja el resto de la página ejecutable, pero conteniendo basura :) – jalf