Я не эксперт по программированию на C, но вот фрагмент кода, над которым я работаю
static char gszBuf[10] ="1234567890";
#define LS_MAX_STRING 255
LoadDatatoBuffer(id, gszBuf, LS_MAX_STRING);
// this method will load the data wrt ID to gszBuf
Учитывая, что вышеуказанный метод загружает строку символов, содержащую более 10 символов, т.е. gszBuf = «abcdefghijklmnopqr»;
Приведенный выше код будет работать без проблем в msdev 6.0. но то же приложение, созданное с использованием Visual Studio 2010, вылетает, когда мы пытаемся скопировать вышеуказанные данные. Мой вопрос заключается в том, что заставило вышеуказанный код работать в msdev 6.0 и почему он не мог работать в Visual Studio 2010
Вы должны быть благодарны, что VS2010 сделал ваш код «крахом».
Когда у вас переполнение буфера, лучше завершить работу как можно скорее, вместо того, чтобы позволить хакерам использовать переполнение буфера.
В VS2010 есть несколько улучшений безопасности и проверки переполнения буфера: рассмотрим их возможности улучшить качество вашего кода и исправить ошибки переполнения буфера.
Неопределенное поведение может означать сбой кода, но может означать, что код работает, но вызывает сбой.
В этом случае, если gszBuf находится в начале страницы ЦП, и после него ничего важного не происходит, он не будет аварийно завершать работу.