簡體   English   中英

為什么我在以下代碼中出現分段錯誤(核心轉儲)?

[英]Why i'm getting Segmentation fault (core dumped) in the following code?

在這段代碼中,使用a--b++顯示分段錯誤,但如果讓--a++b正常工作,為什么?!

add(a,b)
{ 
   if (a==0)
       return b;
    else
       return add(a--,b++); //why this line didn't work??! 
}

post increment 和 decrement 運算符實際上是在表達式計算后遞增或遞減值,這意味着它會在將ab的值傳遞給函數后更改它們。

這樣,您最終將始終將ab更改值傳遞給add ()函數,這將導致堆棧溢出(導致分段錯誤),因為這本質上是一個永遠不會滿足返回條件的遞歸函數。

OTOH,如果您使用預增或減量運算符, ab的值將在傳遞給遞歸add ()調用之前減少,從而滿足return條件,因此您的程序按預期運行。

也就是說,您應該指定函數的返回類型,例如,在本例中為int

是的,問題是因為您在進入函數后進行了增量/減量,添加或減去。 您實際上進入了一個無限循環,這可能會給您帶來分段錯誤。

另外,您的函數定義是錯誤的。

這應該是你的代碼:

int add(int a,int b)
{ 
   if (a==0)
       return b;
    else
       return add(--a,++b);
       //or
       //return add(a-1,b+1);    
}

分段錯誤與訪問分配范圍之外的內存有關。 目前,您的函數將導致 StackOverflow,因為 add 函數會被無休止地調用,直到堆棧指針不能再被進一步推送。

在導致 SegmentationFault 的代碼中,很可能還有其他一些您沒有在此處公開的內容。

暫無
暫無

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

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