Вы используете CLASS
, Class
и Insurance
в смеси, где вы должны использовать одно имя, чтобы ваш опубликованный код не мог скомпилироваться.Я заменяю их на IronMan
.
То, что вы видите как 0xCDCDCDCD
, это не this
значение указателя, а значение члена указателя theDouble
.Проблема возникает в конструкторе:
IronMan::IronMan(double aDouble)
{
*theDouble = aDouble;
}
Этот конструктор разыменовывает неинициализированную переменную-член theDouble
, и поскольку отладчики имеют тенденцию заполнять неинициализированную память некоторыми байтами, такими как 0xCD
, вы будете иметь это значение указателя.Поэтому вы получаете сбой при доступе к памяти по такому адресу.
Один из способов - выделить память для theDouble
IronMan::IronMan(double aDouble)
{
theDouble = new double(aDouble);
}
Лучше было бы избегать использования указателей ввсе, но только имеют прямой двойной элемент данных:
protected:
double theDouble;