【问题标题】:Why am I getting an error when I try to use my structure?当我尝试使用我的结构时,为什么会出现错误?
【发布时间】:2010-07-22 18:21:05
【问题描述】:

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

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

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

void exampleclass::test(){

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

}

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

【问题讨论】:

标签: c++ structure


【解决方案1】:

为你的结构分配内存怎么样?

类似:

example* teststruct = new example;
teststruct->a = 0;

【讨论】:

  • 这行得通。不知道为什么我认为我不需要分配内存。
  • 这个。 Ben,你声明了一个指针,但没有将它指向结构的实例。
  • @Ben:如果你想使用它所指向的东西,指针必须指向某个东西。当然,这里没有理由使用指针。
  • @Ben313 你这么认为是因为你从没想过你在一个班级里:)
【解决方案2】:

struct example *teststruct; 是指向结构example 实例的指针。 (顺便说一句,C++ 不需要struct 前缀,不用了。)

那么,example 你指的是什么? (提示:无,你还没有初始化变量。)你可以动态分配一个:example *teststruct = new example();,然后删除它:delete teststruct;。*

当然,您应该更喜欢自动(堆栈)分配而不是动态分配,然后这样做:

example teststruct;
teststruct.a = 0;

*而且你永远不应该像这样处理原始分配。将它们放入智能指针中。至少,std::auto_ptr

【讨论】:

    【解决方案3】:

    正如您所写,teststruct 指向内存中的某个随机位置,因此访问它,通过执行teststruct->a = 0; 将您带入未定义的行为领域。所以如果你真的很幸运的话,你可以有一个即时错误[如访问冲突、总线错误、分段错误等],否则它会毫无问题地运行。

    您需要像 Max 所说的那样为 teststruct 分配内存,或者在堆栈上创建它并执行以下操作:

    struct example teststruct;
    teststruct.a = 0; //This line does not cause an access violation
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 2014-11-18
      • 1970-01-01
      相关资源
      最近更新 更多