当我停止写入调试文件时,为什么我的代码会停止运行?

时间:2015-02-04 02:50:57

标签: c file freeze

我写了一个在Windows PC上运行的C程序。

我编写了一个用于调试目的的文本文件,当代码到达某些部分时,如果某些部分为true或false,则会写入。

我完成了我的代码,它完全符合预期/预期。 但是,当我注释掉创建和写入文件的代码时,尝试释放文件,程序会冻结。我之前已经在嵌入式系统中使用过这种方法,但之前从未在PC OS上使用过。

这是一个常见问题吗?我应该知道一些原因吗?

以下是我在main中的代码。

int main(int argc, char** argv)
{
    BOOL running = TRUE;
    BOOL get;

    //Open debug file
#ifdef DEBUG
    FILE* debugFile = openFile("debugFile.txt", "w+");
#endif

    //Print start up message to console
    printStartUpMessage();

    //Initialise variables
    initialiseVariables();        

    while(running)
    {
#ifdef DEBUG
        fprintf(debugFile, "%s", "1. In start of main loop")
#endif
        if(_kbhit())
            handleButtonPress();
#ifdef DEBUG
        fprintf(debugFile, "%s", "2. Handled buttons");
#endif
        do
        {
            get = getSourceOne();
        }while(get);

        do
        {
#ifdef DEBUG
            fprintf(debugFile,"%s","3. Getting source two\n");
#endif
            get = getSourceTwo();
#ifdef DEBUG
            fprintf(debugFile,"%s %d","4. Got source two...\n", get);
#endif
        }while(get);

        parseInformation();

#ifdef DEBUG
            fprintf(debugFile,"%s","5. Parsed\n");
#endif

        running = stillRunning();
    }
}

1 个答案:

答案 0 :(得分:0)

我假设您的[在评论中提出]的声明是正确的,除了您所显示的代码之外,没有任何代码会尝试写入调试文件。

您需要更仔细地检查您的其他代码(即不是I / O语句,因为它们几乎肯定是无辜的受害者而不是问题的原因)。我敢打赌,某处存在未定义行为的实例。

这是一个妙语 - 解释如下。

I / O语句(事实上,几乎所有代码)都会影响程序的内存布局(例如,表示FILE指针,存储字符串文字用作格式字符串或只是输出)。

如果某些代码正在写入内存区域,则不应该删除I / O语句会改变被覆盖的内容。无论出于何种原因,操作系统都没有检测到原始问题,但是 - 现在 - 它会终止您的程序。瞧!一个现在崩溃的程序,尽管你只删除了没有的代码 - 本身 - 做错了什么。

未定义行为的症状可能是微妙和间接的。