我在Header文件中为我正在使用的类定义了一个结构,我试图在类的一个方法中使用Struct。看起来基本上是这样的:
struct example
{
double a;
int b;
...
};
在我的类定义上方的标题中,然后在cpp文件中,我有:
void exampleclass::test(){
struct example *teststruct;
teststruct->a = 0; //This line causes a access violation
}
为什么我在这里收到错误?我确定我在这里做了一些完全错误的事情,我必须说我是一个巨大的结构新秀。
答案 0 :(得分:7)
为您的结构分配内存怎么样?
类似的东西:
example* teststruct = new example;
teststruct->a = 0;
答案 1 :(得分:4)
struct example *teststruct;
是指向结构example
的实例的指针。 (顺便说一下,C ++不需要struct
前缀,请将其关闭。)
那么,你指的是什么example
? (提示:无,你没有初始化变量。)你可以动态分配一个:example *teststruct = new example();
,然后删除它:delete teststruct;
。*
当然,您应该更喜欢自动(堆栈)分配而不是动态分配,只需执行:
example teststruct;
teststruct.a = 0;
*你永远不应该真正处理这样的原始分配。把它们放在智能指针中。至少是std::auto_ptr
。
答案 2 :(得分:3)
正如您所写的那样teststruct
指向内存中的某个随机位置,因此通过执行teststruct->a = 0;
访问它会将您带入未定义的行为域。所以你可以 - 如果你真的很幸运 - 一个即时错误[如访问冲突,总线错误,分段错误等]或它将运行没有问题。
您需要像Max所说的那样为teststruct
分配内存,或者在堆栈上创建内存并执行以下操作:
struct example teststruct;
teststruct.a = 0; //This line does not cause an access violation