c++ - 读取访问冲突。这是 0xCDCDCDCD
问题描述
我对自己做错了什么感到困惑?在调试时,this
显示0xcdcdcdcd {theDouble=??? }
所以我知道我的变量没有存储在我的 mutator 中。我将如何解决这个问题?我应该在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();
};`
解决方案
您使用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;
推荐阅读
- powershell - Nuget - 根据搜索列出包时提供提要
- javascript - Haskell Webviewhs 文本字段并返回到 Haskell
- kendo-ui - 剑道提示:你能改变剑道提示弹出窗口来显示一个文本区域而不是一个
- azure - 如何使用 ARM 模板进行基于 Vcore 的弹性池部署?
- java - 参数定义冲突
- node.js - 有没有办法将 graphql 查询字符串转换为 GraphQLResolveInfo 对象?
- c# - Spire PDF 库中 PDF 的页眉和页脚问题
- c# - 如何解决“MapRoute 使用”。{controller}/{name} 在同一路由中执行所有操作调用
- d3.js - D3 画笔 + 缩放:修复更新延迟(参见 GIF)
- python - 根据 Pandas groupby 对象中不同列的最大值获取列的值