[英]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.