【发布时间】:2018-09-02 14:51:57
【问题描述】:
我编写了一个使用霍夫曼编码对文件进行编码的程序。
它工作正常,但由于某种原因,从主函数返回 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:code alex$ ./main haff -c test.txt test.haff
操作:37371553
它以空行结束,终端表示程序继续运行,但最后一个 cout 语句执行良好,我得到它应该返回 0 并完成。返回0后如何使其完成?还是其他代码有问题?
【问题讨论】:
-
如果你有一个空的 main:
int main() {},程序是否也继续运行? -
HuffmanC或HuffmanD是否生成线程? -
他们必须产生,然后孤立其他进程才能具有您所描述的行为
-
通过在返回零之前添加断点来运行堆栈跟踪,并查看剩余的进程。您这里有一个严重的内存问题。
-
@NathanOliver 即使他们这样做了,一旦 main 返回,所有线程也会终止。所以这不会导致声称的行为。