我对我做错了什么感到困惑?调试时,this
显示0xcdcdcdcd {theDouble=??? }
,因此我知道我的变量没有存储在变量器中。我将如何解决此问题?我应该在某个地方初始化this
吗?我正在使用Visual Studio。
谢谢您的帮助。
int main()
{
int i = 0;
const int MAX = 4;
CLASS **object = new CLASS*[MAX];
string name = "todd";
string aString = "words";
double aDouble = 10.0;
object[i]->setDouble(aDouble);
return 0;
}
//.cpp
CLASS::Class()
{
theDouble = new double;
*theDouble = NULL;
}
CLASS::Class(double aDouble)
{
*theDouble = aDouble;
}
void CLASS::setDouble(double p)
{
*theDouble = p;
double Class::getDouble()
{return (*theDouble);}
//.h
class CLASS
{
protected:
double *theDouble;
public:
Insurance();
Insurance(double premium);
//~Insurance();
void setDouble(double p);
double getDouble();
string toString();
};`
答案 0 :(得分:1)
您在混合使用CLASS
,Class
和Insurance
的地方使用一个名称,这样您发布的代码将无法编译。我将其替换为IronMan
。
您看到的0xCDCDCDCD
不是this
指针值,而是指针成员theDouble
的值。问题来自构造函数:
IronMan::IronMan(double aDouble)
{
*theDouble = aDouble;
}
该构造函数取消引用未初始化的成员变量theDouble
并
由于调试器倾向于使用诸如0xCD
之类的一些字节填充未初始化的内存,因此您会将其作为指针的值。因此,访问该地址的内存会崩溃。
一种解决方法是为theDouble
分配内存
IronMan::IronMan(double aDouble)
{
theDouble = new double(aDouble);
}
更好的选择是完全避免使用指针,而只具有直接的double数据成员:
protected:
double theDouble;