2012-05-30 4 views
5

때때로 나는이 디버그 모드에서 내 Qt는 프로젝트 (image)을 실행 오류 "디버그 어설 션 실패"얻는다. 컴파일러에서 아무 말도하지 않고 내 오류를 찾기 위해 무엇을해야할지 모르겠으므로 어디서 잘못 됐는지 알 수 없습니다.디버그 어설 션 실패 : _CrtIsValidHeapPointer (pUserData를)

Windows Vista에서는 Qt Creator 2.4.1, Qt 4.8.1을 사용하여 프로그램합니다. 내가 생각하는 경우 문제는 (

void runFunction() 
{ 
    configure_Scanning(...); 

    while(...) 
    { 
     // do something 
     scanFunction(); 
     // do something 
    } 
} 

을이 내 "incriminated"기능입니다 :

내 프로그램은 레이저 장치에서 일부 정보를 읽고 다음과 유사한 코드를 파일로 저장한다 아이디어는 내가 이리저리 (양방향 스캔 2 차원 매트릭스에 정보를 저장할 수 있도록한다는 것입니다 : 원격 교육lineB이 처음이 무효 QString 있습니다)

void scanFunction() 
{ 
    file.open(); 

    data = getDataFromDevice(); 

    if(flag) 
    { 
     if(QString::compare(lineB,"")!=0) 
     { 
      QTextStream out(&file); 
      out << lineB << endl; 
      lineB = ""; 
     } 
     lineA.append(data+"\t"); 
    } 
    else 
    { 
     if(QString::compare(lineA,"")!=0) 
     { 
      QTextStream out(&file); 
      out << lineA << endl; 
      lineA = ""; 
     } 
     lineB.prepend(data+"\t"); 
    } 

    file.close(); 
} 

m -X to + X 및 viceversa, Y는 지정된 목표로갑니다). lineA은 (-)에서 (+) 읽기를 암기합니다. lineB은 (+)에서 (-)까지의 수치를 암기합니다. 스캔 방향이 바뀌면 파일에 lineA (또는 lineB)을 쓰고 스캔을 진행합니다.

내가 말한 것을 이해합니까? 해결책을 제안 해 주시겠습니까? 내 영어

감사합니다 죄송합니다 : P는

+2

프로그램을 디버깅하려면 대화 상자에서 다시 시도를 클릭하십시오. 그런 다음 호출 스택을 확인하거나이 질문에 추가하면 잘못되었다는 것을 더 잘 이해할 수 있습니다. sidenote에서 끊임없이 파일을 열고 닫는 것은 필요하지 않으며 약간의 오버 헤드가 발생합니다. – stijn

+0

각 단계마다 파일을 열고 닫는 것이 가장 좋은 전략은 아니지만 예기치 않은 중단이 발생할 경우 데이터 손실을 방지하기 위해이 작업을 수행해야합니다. –

+0

그게'flush()'가하는 것이 아닙니까? – stijn

답변

10

_CrtIsValidHeapPointerUserData는 디버그 힙 검사에 의해 발견 된 힙 손상을 가지고 있음을 의미한다. 삭제 된 동적 객체에 정보를 쓸 수있는 모든 사람을 의심하십시오. 그리고 예, 재 작성이 발생하지 않고 다음 힙 검사에서 힙 corruction을 받게됩니다. 다음 힙 검사는 다음 메모리 할당/할당 해제시 수행됩니다. 그러나 단일 스레드 응용 프로그램에서 호출 스택에 의해 간단하게 추적되어야합니다.

+0

"내"Qt Creator가 디버거로 응용 프로그램을 실행할 수 없다고 말하지 않았습니다. 그래서 런타임에 오류를 확인할 수 없습니다. 힙을 검사하는 방법을 설명해 주시겠습니까? –

+0

정말로 말할 수 없습니다.무차별 방식은 모든 포인터를 스마트 포인터 클래스로 대체하고 문제가 감지 될 때 오류 메시지를 발생 시키도록 설정하는 것입니다. – Forgottn

+0

좋은 아이디어! 그러나 ... 문제가 언제 발견되는지 나는 모른다. 어쨌든, 나는이 방법을 시도 할 것이다. 아이디어를 가져 주셔서 감사합니다! –