이진 파일에 데이터를 쓰는 프로그램이있어서 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
의 내 선언을 무시하는 것 같다. 누구나 이것이 일어날 수있는 이유와 해결 방법을 찾거나 수정하는 방법을 알고 있습니다. 아니면 문제가 아닌가?
코드 관련 스 니펫을 표시하십시오. –
일종의 정의되지 않은 동작을 호출 할 가능성이 있습니다. 관련 코드 없이는 알 수 없습니다. – Kaslai
큰 프로그램입니다 ... 무엇이 관련 있다고 생각합니까? 내가 어디에서 '쓴다'? 그렇다면 왜 Release 모드가 아닌 Debug 모드에서 작동합니까? – shoham