读取访问冲突.这0xCDCDCDCD



我很困惑我做错了什么? 调试时,this显示0xcdcdcdcd {theDouble=??? },因此我知道我的变量没有存储在我的突变器中。 我将如何解决此问题?我应该在某个地方初始化this吗?顺便说一下,我正在使用视觉工作室。 谢谢你的帮助。

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();
};`

你在混合中使用CLASSClassInsurance,你应该使用一个名称,这样你发布的代码就无法编译。我用IronMan替换它们.

您看到的0xCDCDCDCD不是指针值this而是指针成员theDouble的值。问题来自构造函数:

IronMan::IronMan(double aDouble)
{
*theDouble = aDouble;
}

该构造函数取消引用未初始化的成员变量theDouble和 由于调试器倾向于用一些字节填充未初始化的内存,例如0xCD因此您将将其作为指针的值。因此,您在该地址访问内存时会出现崩溃。

一种方法是为theDouble分配内存

IronMan::IronMan(double aDouble)
{
theDouble = new double(aDouble);   
}

更好的是完全避免在那里使用指针,而只是直接使用双精度数据成员:

protected:
double theDouble;

最新更新