从main返回0后程序不会停止

时间:2018-03-23 20:36:17

标签: c++ c++11

我编写了一个用霍夫曼编码对文件进行编码的程序。
它工作正常,但由于某种原因从主函数返回0后它不会停止。
主要功能如下:

int main(int argc, char *argv[])
{
    if (argc < 5)
    {
        std::cout << "..." << std::endl;
    }
    else
    {
        if (!std::strcmp(argv[1], "haff") && !std::strcmp(argv[2], "-c"))
            HuffmanC(argv[3], argv[4]);
        if (!std::strcmp(argv[1], "haff") && !std::strcmp(argv[2], "-d"))
            HuffmanD(argv[3], argv[4]);

        std::cout << "Operations: " << count << std::endl;
    }

    return 0;
}

当我运行它时,我得到:

  

MacBook-Pro-Alex:代码alex $ ./main haff -c test.txt test.haff
操作:37371553

以空行结束,终端表示程序一直在运行,但最后一个 cout 语句执行得很好,因为我得到它应该返回0并完成。返回0后如何完成?或者是其余代码中的问题?

1 个答案:

答案 0 :(得分:2)

  

或其他代码中的问题是什么?

可能。也许你已经以某种方式破坏了你的筹码,以便你能够回归&#34;从主要到某个你没想到的地方。如果没有complete, verifiable example,我们真的无法知道。

  

如何在返回0后完成?

您可以在MacOS上使用kill命令强行终止它。使用GUI任务管理器可能会也可能不起作用。

但也许更有效的做法是将调试器附加到流程中,看看它实际上在做什么。

你可以阅读this explanation关于如何使用XCode在MacOS上执行此操作 - 但我不使用MacOS,所以我不会知道。此外,@ SergeyA慷慨地建议尝试using pstack来完成这个过程&#39;当前堆栈。当然,如果堆栈出现乱码,那就不知道你实际会得到什么。

确保编译应用程序时包含调试信息。

最后 - 最好先运行附带调试器的程序,然后在最后cout <<行设置一个断点。