Код C ++ отлично работает в msdev 6.0 и вылетает в Visual Studio 2010

Я не эксперт по программированию на 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

1

Решение

Вы должны быть благодарны, что VS2010 сделал ваш код «крахом».
Когда у вас переполнение буфера, лучше завершить работу как можно скорее, вместо того, чтобы позволить хакерам использовать переполнение буфера.

В VS2010 есть несколько улучшений безопасности и проверки переполнения буфера: рассмотрим их возможности улучшить качество вашего кода и исправить ошибки переполнения буфера.

1

Другие решения

Неопределенное поведение может означать сбой кода, но может означать, что код работает, но вызывает сбой.

В этом случае, если gszBuf находится в начале страницы ЦП, и после него ничего важного не происходит, он не будет аварийно завершать работу.

0

По вопросам рекламы [email protected]