Базовая проверка во время выполнения в VS C ++ 2010 - PullRequest
1 голос
/ 12 августа 2011

Я использую MSVS2010 для предыдущего проекта, разработанного на C.

Я вижу проблему с режимом отладки и выпуска. Режим отладки дает мне ожидаемый результат, в то время как режим выпуска дает неверный результат, а результаты, полученные в режиме выпуска, отличаются во всех прогонах (отличаются).

Затем я перешел к свойствам проекта и включил базовую проверку времени выполнения (BRC) для режима выпуска. Если я поверну настройку BRC на «Stack Frames (RTCs)» или RTC1, то результат будет таким же, как в режиме отладки. Если я использую только неинициализированные переменные (RTCu), результат неверный.

Когда я включаю все предупреждения, в программе есть 3 типа предупреждений: 1. Заменить функцию X на функцию X_s (чтобы отключить использование _CRT_SECURE_NO_WARNINGS) 2. ‘<’: несоответствие со знаком / без знака. Причина, которую я определил </p>

#define NO_OF_INPUTS 20
int j;
j = 0;
while (j<NO_OF_INPUTS) //The warning is for this line
{…}

Добавлено 4 байта дополнения после элемента данных «Состояние». Вот структура:

typedef struct X
{
    int State;
    double Value;
} XName;

Сделав поиск в Google, я нашел это: http://msdn.microsoft.com/en-us/library/8wtf2dfz(v=vs.80).aspx

Так что, я думаю, что материал для заполнения может быть ... Не уверен, хотя

Есть предложения по исправлению ошибки? И другие предупреждения, если это возможно ...

Best.

1 Ответ

1 голос
/ 12 августа 2011

Кажется, трудно дать вам хороший совет, потому что обычно такие проблемы возникают в какой-то момент кода, когда программист делает некоторые предположения (сознательные или нет), которые не гарантируются заполнением (например, инициализация памяти и т. Д.) Стандартом.,Такое поведение также может быть результатом записи / чтения в / из памяти, которая не является «вашей» (но в режиме отладки память была инициализирована или вы читаете / записываете некоторые байты, которые не требуются программе).

Это, конечно, хорошая идея - исправлять предупреждения так, как вы их описали.Однако, мне кажется, что это не обязательно поможет.Вы можете попробовать cppcheck для получения предупреждений, таких как неинициализированная память.

Если это проблема с памятью, вы можете не получать предупреждения компилятора.В этом случае Microsofts (бесплатный) «Application Verifier» иногда может помочь.

Если это не так, вам следует написать модульные тесты, чтобы приблизиться к проблеме.В любом случае, это хорошая идея ...

...