2013-04-01 2 views
1

boost :: iostreams (1.53.0)를 사용하여 HTTP 요청 본문의 압축을 풀고 나중에 처리하려고합니다. 하지만 다음 코드를 실행하면 충돌이 발생합니다.boost :: iostreams를 사용할 때 크래시가 발생했습니다.

try { 
    using namespace boost::iostreams; 
    ifstream file(argv[1], std::ios_base::in | std::ios_base::binary); 
    boost::iostreams::filtering_istream in; 
    in.push(gzip_decompressor()); 
    in.push(file); 
    std::stringstream strstream; 
    boost::iostreams::copy(in, strstream); 
} catch (std::exception& e) { 
    cout << e.what() << endl; 
} 

충돌이 부스트의 gzip.hpp에서 (호출 스택을 보면) 더 구체적으로 gzip_header() { reset(); }에서, gzip_decompressor()에서 발생합니다.

나는 boost :: iostreams 라이브러리를 컴파일하고 macports에서 부스트를 사용하려고했지만 같은 충돌이 발생합니다. 나는 또한 gzstream library을 사용하여 시도했지만, 생성자에서 더 구체적으로 생성자 igzstream에서 충돌합니다.

저는 이것이 zlib 관련 문제라고 생각하는 경향이 있습니다. 코드를 작성하고 실행하기 위해 Mountain Lion 및 xCode 4.6이 적용된 MacBook Pro를 사용하고 있습니다.

혹시이 문제가 발생 했습니까?

+0

디버거를 연결하고 충돌의 스택 추적을 게시 할 수 있습니까? –

+0

argv [1]이 실제로 파일을 가리키는 것을 확인 했습니까? – Zac

+0

@Zac gzip_decompressor() 충돌은 제공된 argv와 아무런 관련이 없습니다. 그럼에도 불구하고 올바른 파일 경로를 가리 킵니다. – afp

답변

1

문제점 : Apple의 LLVM 컴파일러가 발견되었습니다. GCC를 사용하고 있다고 확신했지만, 그렇지 않은 것 같습니다.

std::string 개체를 인스턴스화하여 발생하는 또 다른 이상한 충돌이 발생하여이를 발견했습니다. 이것은 내가 gcc 빌드 라이브러리를 연결하는 것에 만족스럽지 않은 LLVM 컴파일러를 사용하고 있음을 발견 한 프로젝트 설정을 확인하게했습니다.

답장을 보내 주셔서 감사합니다.

관련 문제