2009-11-03 4 views
1

호출 스택에서 더 낮은 호출이 발생하는 버그를 찾으려면 스택의 "다운"상태일까요?"스택 다운"

+0

왜 downvotes? 그것은 아주 냉혹 한 질문입니다. –

+0

누군가는 그것을 멀리 오른쪽으로 생각할 수도 있습니다. –

+0

이 사람은 계좌를 rep-inflating했습니다. "존"조심해 –

답변

2

위로 성장하는 스택의 경우 (플레이트라고 생각하면) 예. 현재 프레임보다 낮은 스택 프레임에서 뭔가가 '아래'라고합니다. (솔직하게 말해서, 사람들이 스택을 자주 내리는 것을 듣지 않습니다.)

편집 : 'lower'는 현재 프레임에 도달하기 위해 저장 한 스택 프레임을 의미합니다. 예를 들어 :

'피크'에서
int main() { 
    a(); 
} 

void a() { 
    b(); 
} 

int b() { 
    return 0; 
} 

, main() 하단 프레임이 될 것이고, 그 위에 a()과 상단에 다음 b() 될 것이다.

은 (버그를 '호출'에 대한 의견은 다소 혼란 스럽다.)

+0

+1 "예 상 성장 스택". 이것은 문제의 핵심 인 것 같습니다. 스택이 상향 또는 하향으로 성장하는 것을 상상하십니까? 저는 항상 책상 위에 종이를 쌓아 놓은 것과 같은 스택을 생각합니다. 그들은 항상 위로 자랍니다. (하지만 AFAIK 대부분의 OS는 콜 스택을 아래쪽으로 성장시켜 구현하므로 완벽하게 합법적으로 볼 수 있습니다.) –

1

수정. 스택의 "아래로"는 중첩 된 함수 호출을 의미합니다. A가 B와 B를 호출하면 C가 호출되고 C는 A에서 스택 아래로 이동하고 A는 C에서 스택의 위쪽으로 이동합니다.

또한 일반적으로 버그를 "호출하지"않습니다. 하나는 버그를 "만남"또는 "재생산"합니다.