2013-04-17 2 views
2

힙 손상 오류가 발생했습니다. dll과 TestAPP가 있습니다.std :: vector를 반환 할 때 "힙 손상"오류가 발생했습니다. 함수에서

  1. vector<Point> vInPts; // 테스트 응용 프로그램 - 호출 아래

    vInPts.push_back(Point(730,405)); 
    vInPts.push_back(Point(319,680)); 
    vInPts.push_back(Point(292,757)); 
    vInPts.push_back(Point(318,756)); 
    vInPts.push_back(Point(726,736)); 
    vInPts.push_back(Point(344,731)); 
    
  2. vector<Point> vOutPts;

  3. 처럼 입력을 덤핑 DLL -> "DLL에서 같은 vInPts 벡터에 vOutPts 벡터를 복사 ->에서 반환 할 때 이 함수는 TestApp -> Heap Error가 발생합니다. Facing Heap Error enter image description here

어떻게이 힙 오류를 해결할 수 있습니까?
미리 감사드립니다.

+0

어떻게 출력 벡터에 복사합니까? – juanchopanza

+0

@ juanchopanza 나는 적절한 방법으로하고 있으며, 나는 내 경우에는 복사가 문제가되지 않을 것이라고 확신한다. "내가 테스트 한"경우에도 입력 벡터만을 dll에 전달하고 입력 벡터를 사용하지 않고 컨트롤이 TestAPP로 이동해도 동일한 힙 오류가 발생합니다. – Pixel

+0

어떤 런타임을 사용하고 있습니까? dll과 응용 프로그램에 동일한 런타임을 사용하고 있습니까? –

답변

2

Point 클래스의 실제 정의를 읽는 것이 재미있을 것입니다. 복사 할 수 있습니까? 또한

, 당신은 DLL 및 STL 클래스를 가진 EXE를 사용하고 있기 때문에, DLL과 EXE 모두 동적 는 CRT같은 맛에 연결로 구축되어 있는지 확인합니다 (예 : 모두 내장되어 있습니다 같은 버전의 C++ 컴파일러와 동일한 설정 (예 : 릴리스 빌드 EXE 등의 릴리스 빌드 DLL))

실제로 STL 클래스의 구현은 릴리스 빌드 및 디버그 빌드가 다릅니다 반복자 유효성 검사와 같은 검사에 더 많은 오버 헤드가 있습니다.)
STL 클래스가 EXE와 DLL간에 공유되는 경우 같음 클래스 여야하며 이름은 같지만 구현이 다른 클래스 여야합니다.