当我尝试使用我的结构时,为什么会出现错误?

时间:2010-07-22 18:21:06

标签: c++ structure

我在Header文件中为我正在使用的类定义了一个结构,我试图在类的一个方法中使用Struct。看起来基本上是这样的:

struct example
{
     double a;
     int b;
     ...
};

在我的类定义上方的标题中,然后在cpp文件中,我有:

void exampleclass::test(){

    struct example *teststruct;
    teststruct->a = 0; //This line causes a access violation

}

为什么我在这里收到错误?我确定我在这里做了一些完全错误的事情,我必须说我是一个巨大的结构新秀。

3 个答案:

答案 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