簡體   English   中英

C ++中的指針; 細分錯誤錯誤:

[英]Pointers in C++; segmentation fault error:

我剛剛開始學習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();

}


為了清楚起見,我有一個Ah和Bh文件,其中聲明“ 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); 您需要確保delete a; 在程序的稍后位置,否則動態分配的內存將被泄漏。

a被分配給process()中的局部變量,因此在printInfo()中無效

變量a在您的方法中是本地的-在類級別聲明它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM