我编写了一个用霍夫曼编码对文件进行编码的程序。
它工作正常,但由于某种原因从主函数返回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后如何完成?或者是其余代码中的问题?
答案 0 :(得分:2)
或其他代码中的问题是什么?
可能。也许你已经以某种方式破坏了你的筹码,以便你能够回归&#34;从主要到某个你没想到的地方。如果没有complete, verifiable example,我们真的无法知道。
如何在返回0后完成?
您可以在MacOS上使用kill
命令强行终止它。使用GUI任务管理器可能会也可能不起作用。
但也许更有效的做法是将调试器附加到流程中,看看它实际上在做什么。
你可以阅读this explanation关于如何使用XCode在MacOS上执行此操作 - 但我不使用MacOS,所以我不会知道。此外,@ SergeyA慷慨地建议尝试using pstack来完成这个过程&#39;当前堆栈。当然,如果堆栈出现乱码,那就不知道你实际会得到什么。
确保编译应用程序时包含调试信息。
最后 - 最好先运行附带调试器的程序,然后在最后cout <<
行设置一个断点。