Can';运行我的代码时,不要写入文件

Can';运行我的代码时,不要写入文件,c,C,我有一个将数据写入二进制文件的程序,当我在Visual Studio 2013中以调试模式(无优化)运行它时,它可以工作,但当我在发布模式下运行它时,启用了最大化速度时,它无法工作(文件变为空) 你能告诉我为什么它可能不起作用吗 编辑: Dr.在Release模式下运行应用程序的内存日志,如果您看到一些警报,请告诉我: 哪些错误可能导致问题? 另外,我是否应该修复每一个错误?或者其中一些是“假阳性” 编辑: 在通过以下指南调试优化的代码之后:,我发现在生成一个huffman树(从一个字符优先级队

我有一个将数据写入二进制文件的程序,当我在Visual Studio 2013中以
调试
模式(无优化)运行它时,它可以工作,但当我在
发布
模式下运行它时,启用了
最大化速度
时,它无法工作(文件变为空)

你能告诉我为什么它可能不起作用吗

编辑: Dr.在
Release
模式下运行应用程序的内存日志,如果您看到一些警报,请告诉我:

哪些错误可能导致问题?
另外,我是否应该修复每一个错误?或者其中一些是“假阳性”

编辑:

在通过以下指南调试优化的代码之后:,我发现在生成一个huffman树(从一个字符优先级队列中)时发生了一些非常奇怪的事情,这是我的代码:

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.
}

我可以在调试器中看到问题不在
队列中,因为它应该出现,但它似乎忽略了我对
根的声明,然后当我尝试执行
根->左
时,它会覆盖
队列中的数据。有人知道为什么会发生这种情况,以及如何找到解决方法或修复它吗?还是根本不是问题?

我找到了问题的原因。它与文件无关,我有一个函数
initMap
,它创建一个结构:
Map m
,用初始值初始化它,并将
&Map
返回给另一个函数。我怀疑这可能是个问题,因为它将从堆栈中弹出,然后指针将不指向任何内容。但是,由于它在我测试它(在调试模式下)时起作用,我就不去管它了。但显然它不起作用。所以我做的是
Map*Map=(Map*)calloc(1,sizeof(Map))成功了


感谢mafso和Kalsai帮我解决了这个问题。

显示代码的相关片段。您可能调用了某种类型的未定义行为。没有相关的代码我们就说不出来。这是一个大程序。。。什么被认为是相关的?其中I
fwrite
?如果是这样,为什么它在调试模式下工作而不是在发布模式下工作?它并没有真正修复它;但通常情况下,未优化的代码更接近于格式错误的代码,如果它是格式正确的代码,它会做什么。请向我们展示您的代码中包含相关
fwrite
的部分。