2017-12-06 8 views
0

텍스트 파일을 읽고 파일의 작은 줄 수의 벡터를 성공적으로 반환하는 함수가 있습니다. 내가 선을 처리 할 수있는 기능이 벡터를 통과하고 벤 보이트가 지적한대로,알 수없는 함수 호출에서 처리되지 않은 예외가 발생했습니다.

Unhandled exception at 0x00267EF9 in Bridge.exe: 0xC00000FD: Stack overflow (parameters: 0x00000000, 0x00A82000). occurred 

있도록 오류가 발생했습니다, 아마 분명히 예를 던졌다 기능과는 아무런 관련이없는 스택 오버 플로우가 발생했습니다

int LinesToCards(std::vector<std::string>& lines) { 
     int retval = -999; 
     return retval; 
    } 

이는 제 3 자 DLL에 필요한 라인이 있던 주에서 호출 된

int main() 
     { 
      std::string cards[MAXDEALS][DDS_HANDS][DDS_SUITS] ; 
      int retval = -999;   
      retval = LinesToCards(lines);  
      return 0; 
    } 

#DEFINE 4을 DDS_HANDS#DEFINE의 DDS_SUITS 4 은 변경되었지만 원래 이제 예외가 발생

#define MAXDEALS 999 

를 작동하지 않을 수 있습니다. 코드를 줄이면

#define MAXDEALS 890 

코드가 다시 실행됩니다. 내가 그렇게한다면

#define MAXDEALS 891 

충돌합니다. 16240과 16256 사이에 마법의 숫자가 있습니까?

+0

호출자가 스켈레톤 함수를 호출하지 않는 경우, 호출자 함수 ReadFileStable이 유효합니까? 무한 재귀는 스택 오버플로를 설명 할 것입니다 –

+0

죄송합니다. main은 둘 다 호출합니다. ReadFileStable은 LinesToCards로 처리 할 입력 행을 가져옵니다. – DLyons

+0

전체 프로그램을 우리에게 보여주지 않으면 프로그램의 미묘한 문제가 무엇인지 말할 수 없습니다. –

답변

1

스택 공간이 부족합니다.

오류가 발생하는 기능은 문제가되는 기능이 아니기 때문에 작은 테스트 프로그램에서는 발생하지 않습니다.

실패한 코드에 대한 호출 경로의 함수 중 하나가 매우 욕심이 많았고 호출하는 함수에 사용할 수있는 충분한 스택을 남기지 않았습니다.

스택의 큰 개체와 너무 심한 재귀를 모두 찾습니다.

+0

예, 그렇게 생각합니다. 나는 잘 작동하는 것들을 리팩토링하고 있지만, 매우 배고픈 제 3 자 DLL을 호출하고, 이전 호출을 엉망으로 만든다. – DLyons

+0

다른 곳에서는 완전히 다른 제 3 자 프로그램에서 처리 할 파일을 생성하고 있습니다. 해당 코드 섹션에서 아무 것도 변경되지 않았으며 생성 된 파일도 완벽하게 확인되었습니다. 그러나, 설명 할 수 없게, 그것은 지금 단지 비어있는 헤더 선과 비어있는 트레일러 선과 함께 움직일 것이다. 수동으로 추가하면 스택 오버 플로우 문제가 사라집니다. 도와 주셔서 감사합니다. – DLyons