c++ - C++中的指针;段错误错误 :

标签 c++ pointers segmentation-fault

我刚开始学习 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(正确)和段错误。谁能帮我理解为什么会这样?根据我目前对指针的理解,我做的是正确的事情吗?

主要内容(无效) {

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;

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

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

关于c++ - C++中的指针;段错误错误 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14912197/

相关文章:

C++ : Double free or corruption (out)

c++ - 使用 typedef 作为变量名不会产生任何错误

c++ - 这应该编译吗?

c++ - 删除自身内的 std::function 对象

c++ - weak_ptr 和父子循环依赖

c - 在 C 中使用指针操作二维数组

c++ - 读取复杂文件以对 <string,pair<map<string,string> string>> C++

c++ - 与指针引用和指针混淆

c++ - 插入到 multimap 导致段错误

c++ - Linux 共享内存与 C++ : Segmentation Fault