2014-07-16 3 views
-4

이진 파일에 데이터를 쓰는 프로그램이있어서 Debug 모드 (최적화 안 함)의 Visual Studio 2013에서 실행할 때 작동하지만 실행하면 Release 모드에서 Maximize Speed이 활성화되어 있으면 작동하지 않음 (파일이 비어 있음) ...최적화 된 코드를 실행할 때 파일에 쓸 수 없음

왜 작동하지 않는지 말할 수 있습니까?

는 편집 : 당신은 놀라운 것을 볼 경우 Release 모드에서 응용 프로그램을 실행 박사 메모리 로그, 제발 말해 : http://pastebin.com/5s4Z51ZV

어떤 오류 문제가 발생할 수 있습니다?
또한 모든 오류를 수정해야합니까? 또는 그들 중 일부는 "오 탐지"입니까?

는 편집 :

이 가이드를 통해 최적화 된 코드를 디버깅 후 : http://msdn.microsoft.com/en-us/library/vstudio/606cbtzs%28v=vs.100%29.aspx, 나는 (문자의 우선 순위 큐에서)를 허프만 트리를 생성 할 때 무슨 일이 벌어지고 매우 이상한 것을 발견,이 내 코드입니다 :

HNode * generateHuffmanTree(Queue * queue) // generates a huffman tree from a queue of a file's characters. 
{ 
    HNode * root = (HNode *) calloc(1, sizeof(HNode)); 
    root->left = dequeue(queue); // gets the two smallest-amount characters 
    root->right = dequeue(queue); // and puts them into left and right of the root. 
    root->character = '\0'; 
    root->value = root->left->value + root->right->value; 
    if (isQueueEmpty(queue)) return root; // end condition, if it's the only thing left. 
    enqueue(queue, root); // puts the root back in the queue so it can be a part of the process in the next iteration 
#ifdef debug 
    printQueue(queue); 
#endif 
    generateHuffmanTree(queue); // runs the operation again, now with the new root in the queue. 
} 

나는 그것을에서 예상대로 오는대로 문제가 queue에없는 디버거에서 볼 수 있지만, 나는 그것이 queue의 데이터를 덮어 root->left을하려고 할 때 다음 root의 내 선언을 무시하는 것 같다. 누구나 이것이 일어날 수있는 이유와 해결 방법을 찾거나 수정하는 방법을 알고 있습니다. 아니면 문제가 아닌가?

+1

코드 관련 스 니펫을 표시하십시오. –

+0

일종의 정의되지 않은 동작을 호출 할 가능성이 있습니다. 관련 코드 없이는 알 수 없습니다. – Kaslai

+0

큰 프로그램입니다 ... 무엇이 관련 있다고 생각합니까? 내가 어디에서 '쓴다'? 그렇다면 왜 Release 모드가 아닌 Debug 모드에서 작동합니까? – shoham

답변

0

문제의 원인을 파악했습니다. 파일과 특별히 관련이 없었습니다. 구조체를 생성하는 initMap 함수가 있었고 초기 값으로 초기화하고 다른 함수에 &map을 반환합니다. 나는 이것이 스택에서 튀어 나올 것이고 포인터가 아무 것도 없을 것이기 때문에 이것이 문제가 될 것이라고 생각한다. 하지만 디버깅 모드에서 테스트 해본 결과 작동하지 않았기 때문에 혼자 남겨 두었습니다. 그러나 명백하게 그것은 작동하지 않는다. 그래서 제가 한 것은 Map * map = (Map *) calloc(1, sizeof(Map));이고 작동했습니다.

mafso 님과 Kalsai님께 감사드립니다.