Í es byte 0xCD, que el asignador de depuración de Windows escribe en sus 15 bytes de memoria para indicar que se trata de una memoria de montón no inicializada. La pila no inicializada sería 0xCC. La idea es que si alguna vez lees la memoria e inesperadamente obtienes este valor, puedes pensar: "mmm, probablemente he olvidado inicializar esto". Además, si lo lee como un puntero y lo desreferencia, Windows bloqueará su proceso, mientras que si un buffer no inicializado estuviera lleno de valores aleatorios o arbitrarios, a veces por casualidad obtendría un puntero válido, y su código podría causar todo tipos de problemas C++ no dice qué valores contiene la memoria no inicializada, y los asignaturas sin depuración no perderán tiempo llenando la memoria con valores especiales para cada asignación, por lo que nunca debe confiar en que ese valor esté allí.
Esto va seguido de 4 bytes de ý (byte 0xFD), que el asignador de depuración de Windows usa para indicar una región fuera de límites al final de un búfer. La idea es que si alguna vez te encuentras en el depurador escribiendo en una región que se ve así, puedes pensar "mmm, probablemente haya invadido mi memoria intermedia aquí".Además, si el valor ha cambiado cuando se libera el búfer, el asignador de memoria puede advertirle que su código es incorrecto.
«es byte 0xAB y þ es 0xFE. Es de suponer que estos también tienen la intención de llamar la atención (no son punteros plausibles o compensaciones, por lo que no forman parte de la estructura del montón). No sé lo que significan, posiblemente más datos de guardia como el 0xFD.
Finalmente, supongo que ha encontrado 0 byte, el decimosexto byte más allá del final de su búfer de 15 bytes (es decir, el recuento de 31 bytes desde el inicio).
Hacer la pregunta como "C++" sin mencionar que estás en Windows sugiere que así es como se comporta C++. No lo es, es cómo se comporta una implementación de C++, con opciones de compilador particulares y/o DLL vinculados. C++ no le permite leer más allá del final del búfer, Microsoft solo está siendo amable con usted y le permite salirse con la suya sin que se cuelgue o empeore.
En primer lugar, dice que esto es aún una cadena? Para el compilador, solo quieres 15 bytes sin formato de memoria. Si quieres una cadena, usa 'std :: string'. Entonces, ¿qué es esta información? Es lo que sea que haya estado allí. La mayoría de los compiladores realmente completarán estos datos con datos de depuración u otra información, por lo que cuando use datos no inicializados, es probable que tenga un patrón consistente. – GManNickG
No sé por qué las personas votan negativamente, es una pregunta completamente válida. El hecho de que el OP malinterprete algo no significa que debemos castigarlo por ello. – GManNickG
Relacionados: http://stackoverflow.com/questions/2029651/how-do-you-initialise-a-dynamic-array-in-c http://stackoverflow.com/questions/958549/dynamically-allocated-char Puede Por mi vida encontrar un duplicado exacto, pero * juro * que hay uno ... – dmckee