C++中的指针;分段错误错误:

Pointers in C++; segmentation fault error:

本文关键字:错误 分段 指针 C++      更新时间:2023-10-16

我刚刚开始学习C++,现在我正在使用指针。我不明白为什么会发生以下事情。

所以,假设我有两个A类和B类。A 有一个整数字段(int valueA(,B 有一个指针字段(指向 A(,A *a。

class A{
   A::A(int value){
    valueA = value;
}

 void A::displayInfo (){
      cout<<A<<endl;
    }
 }

class B{
    B::B(){
    a=0;
  }

  void B::printInfo (){
       a -> displayInfo(); //Segmentation fault
     }
  void B::process(){
     A new_A = A(5);
     a = &new_A;
     new_A.displayInfo(); //correct output
     a -> displayInfo();  //correct output
     }
  }

现在,当我在主类中时,我执行以下操作:创建 B 类的实例并调用 process(( 和 print(( 函数。在输出中,我得到:5(正确(,5(正确(和分段错误。谁能帮我理解为什么会这样?根据我目前对指针的理解,我正在做正确的事情?

int main(void({

B b_object();
b_object.process();
b_object.print();

}


为了清楚这一点,我有一个 A.h 和 B.h 文件,我分别声明 "int valueA;" 和 "A *a;"。我知道没有指针可以更容易地完成这项工作,但我正在尝试学习指针在这里的工作原理:D

 A new_A = A(5);
 a = &new_A;

在这里,您可以创建process本地new_A并将其地址分配给a。当process函数结束时,new_A将超出范围并被销毁。现在a指向无效对象。

这里真正的解决方案是不要使用这样的指针,但是如果你真的必须这样做,为了在函数结束时有东西,你需要动态分配它。用a = new A(5);执行此操作。您需要确保在程序的稍后某个时间点delete a;,否则动态分配的内存将被泄漏。

a 在

process(( 中被分配给局部变量,因此在 printInfo(( 中无效

变量a是方法的局部变量 - 在类级别声明它