Вопрос: У Миши было 5 яблок.
Два яблока он отдал Маше.
Сколько стало у Маши?
Ответ: Неизвестно. Нужно
инициализировать переменные.
Два яблока он отдал Маше.
Сколько стало у Маши?
Ответ: Неизвестно. Нужно
инициализировать переменные.
Сегодня столкнулся с тем, что в релизе программа не работала, а в дебаге выполнялась вполне корректно. Причины могут быть разными, но первое что нужно проверять — это все ли переменные инициализированы. Интересно, что в Visual Studio нет никакого предупреждения с /W4 и флагом /analyze. В приведенном ниже примере компилятор нашел только одну проблему:
#include <iostream>
using namespace std;
struct X
{
int x;
};
struct Y
{
int y;
Y() {}
};
int main()
{
X x;
Y y;
int ly = y.y; // не ловит
int lx = x.x; // warning C6001: Using uninitialized memory 'x': Lines: 19, 20, 21, 22
cout << ly << endl << lx << endl;
}Из других компиляторов, которые я попробовал ошибку поймал только GNU C++ с флагом -Wuninitialized. Comeau С++ и Intel C++ поймали только одну ошибку. А мне казалось, что такие простые вещи уже научились ловить все приличные компиляторы...