Переменные C ++ типа double всегда меняют свои значения на -9,25596e + 061 - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть двухмерная фигура из прямых линий.

Края фигуры имеют координаты типа double.Значения координат хранятся в объекте с именем Dot.

Данные, относящиеся к строке (это линия восходящей или нисходящей, значения «a» и «b» в «a * X + b =»).= Y "и т. Д.) Хранится в объекте с именем Line.Класс Line также имеет два объекта Dot для двух концов каждой линии.Класс Line также имеет 2 функции / методы и один конструктор.Конструктор не имеет аргументов.Первая функция / метод не имеет аргументов, а вторая имеет.Обе функции / методы создаются для автоматического изменения всех данных при необходимости.

Я вставляю число сторон фигуры и координаты ребер после запуска программы.Позже программа должна написать на экране все о каждой строке.Независимо от того, какие координаты я вставляю, координаты первой точки равны X = -9,25596e + 061 и Y = -9,25596e + 061.Но у других точек есть координаты, которые я изначально вставил.

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

Я искал проблему в алгоритме и коде.Я ничего не нашел.

Я использую Visual C ++ 2010 Express.Я также использую библиотеки iostream и vector.

Так почему координаты X и Y первого ребра меняют свои значения на -9,25596e + 061?

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

используйте калькулятор программистов и введите 0xcccccc ..., а затем преобразуйте его в десятичное число (основание 10), это будет что-то похожее. Это всегда означает, что у вас есть неинициализированные значения в памяти. В окне памяти или отладчике в Visual Studio вы можете щелкнуть правой кнопкой мыши по окну просмотра и во всплывающем меню вы можете выбрать опцию для отображения шестнадцатеричных значений для памяти. Иногда, когда я отлаживаю сбой, я делаю это для проверки необработанных данных с плавающей запятой.

1 голос
/ 27 декабря 2011

ОК, проблема оказалась в коде. Я не правильно инициализировал ... Пришлось поменять местами две переменные, чтобы решить проблему. Благодаря Гансу Пассанту и Балтраму я понял, где искать проблему: при вызове элементов из любого типа массива.

Да, всегда будь осторожен, когда делаешь такие вещи.

...