编辑:问题已解决。 @sth问我是否忘记删除我可能用“new”创建的对象。他是对的!我忘了它。并修复确实解决了问题。我想这是Visual Studio为我做的事情而Linux并没有。
编辑2:代码被删除,因为这是一个学校项目和潜在的剽窃问题,即使我自己编写代码。此问题似乎与我的代码的细节无关,更多的是新的和删除的一般c ++用例。
完全相同的代码在Visual Studio 2013(安装在Windows上)和我学校的ssh服务器上表现不同,我使用g ++编译代码。代码编译没有错误,除了1部分外,按预期工作。在将数组内容逐行写入文件时,它会减少1行。
如果数组有10个元素,Visual Studio编译的代码会创建10行的“sorted.txt”文件,并且所有文件都只包含1个整数。没空行。 Ssh编译代码仍会创建10行,但最后一行为空。所以我的“sorted.txt”文件中实际上缺少1个整数。我的作业将在评分时在此服务器上编译,因此这可能是一个问题。
答案 0 :(得分:2)
您的代码包含避免在最后一行末尾写入换行符的逻辑。这很愚蠢,感觉有点诠释。你需要换行符。
答案 1 :(得分:1)
当我第一次看到你的代码时,我认为你基于流的bool运算符关闭流是很奇怪的。您可以阅读bool运算符Here的内容。并且,如Here所述,即使流仍处于打开状态,bool运算符也可以返回false。考虑根据以下条件关闭流:
if (output.is_open ())
而不是
if (output)
答案 2 :(得分:1)
std::ofstream
是一个缓冲流。如果未正确关闭或刷新,则某些缓冲的数据可能无法写入磁盘。
在您的情况下,只要包含std::ofstream
被销毁,就会清除FileManager
。很可能不会发生这种情况。可能是FileManager
动态分配new
并且永远不会被delete
破坏,或者程序异常终止,例如使用C库函数exit()
只有最后一行受此问题的影响,因为std::endl
会刷新流并强制将以前的数据写入磁盘。