오늘의 황당 코드!

int analyze_element(char* pszSrc, char** ppszObj)
{
  :
  :
  string strBuff = "";
  int iFlag = 0;
  :
  :

  if (pszPos)
  {
    //string strBuff = "";
    //int iFlag = 0;
    :
    :
    while(1)
    {
      if (_SCANAPI_get_sent(&pp;_word, &n;_word) == eEOF)
      {
        //cout << "break : " << iTime << endl;
        break;
      }

      :
      :
    } // while (1)
    :
    :
  } // if (pszPos)
  :
  :
  return iReturn;
}

OS는 FreeBSD 4.10-Releases 버전이고, 컴파일러는 g++ 2.95.4 다. scan 라이브러리를 이용해 문자열을 형태소 분석하는 루틴인데 원래는 저 strBuff 변수가 if 문안에 있었다. while 루프 안에서 strBuff 에 +=로 append를 한다. 문제는 어느정도 처리를 하다가 마지막 return iReturn; 문에서 segmenet fault가 뜬다. 이상한건 while문 안에 있는 루프 탈출 조건 검사시 주석으로 막은 cout << … 을 실행하면 이상없이 잘 도는 거다. 아무래도 스택이 꼬이는 듯 해서 strBuff 선언을 함수 시작위치로 옮겼다. 일단 이렇게 해서 해결은 봤는데 찜찜하다. 나중에 시간나면 한번 원인을 분석해 봐야겠다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중