liberar error de memoria de puntero libre: CRT detectó que la aplicación escribió en la memoria después del final del búfer de pila

Release Free Pointer Memory Error

Cuando se depura el programa win32, malloc para asignar memoria, cuando se produce el último error de memoria de liberación libre, el código original es el siguiente:



Aquí, después de llamar a la asignación de memoria malloc finalizada, la primera dirección de pstr a 0x00c5abb0, copie esta dirección en la ventana de memoria, rastree la memoria, de la siguiente manera:





pstr tamaño de byte asignado es 32 bytes, donde 32 bytes no se inicializan establecido 0xcd, 4 th 0xfd detrás de la pila de depuración de Microsoft C ++ con el valor de la posición de centinela de la bandera 'tierra de nadie', donde entendí que se usaba para identificar el límites de la memoria, consulte la información de este artículo:

http://blog.sina.com.cn/s/blog_95bf1ccc010154uu.html

Luego, después de poner en marcha el siguiente paso, después de que se ejecute la función _stprintf_s, descubrimos el problema:



Aquí, el rojo representa los cambios de memoria, 0xfd también se ha cambiado a 0xfe, la memoria que está fuera de línea una mirada más cercana a los datos formateados está escrita _stprintf_s cadenas de función en la versión Unicode del prototipo es _swprintf_s, en MSDN en, la unidad del segundo parámetro es el número de caracteres en lugar de bytes:

Después de solucionar el problema, modifique el segundo parámetro pasado al número máximo de caracteres de _stprintf_s, de la siguiente manera: