[英]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 運算符實際上是在表達式計算后遞增或遞減值,這意味着它會在將a
和b
的值傳遞給函數后更改它們。
這樣,您最終將始終將a
和b
更改值傳遞給add ()
函數,這將導致堆棧溢出(導致分段錯誤),因為這本質上是一個永遠不會滿足返回條件的遞歸函數。
OTOH,如果您使用預增或減量運算符, a
和b
的值將在傳遞給遞歸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.