我收到一个奇怪的错误:
*** glibc detected *** findbasis: free(): invalid next size (normal): 0x0000000006a32ce0 ***
当我尝试关闭()一个 std::ofstream 时:
void writeEvectors(int l, parameters params, PetscReal* evectors, int basis_size)
{
for (int n = 1 + l; n <= params.nmax(); n++)
{
std::stringstream fname(std::ios::out);
fname << params.getBasisFunctionFolder() << "/evectors_n" << std::setw(4) << std::setfill('0') << n << "_l" << std::setw(3) << std::setfill('0') << l;
std::ofstream out(fname.str().c_str(), std::ios::binary);
std::cerr << "write out file:" << fname.str() << " ...";
out.write((char*)( evectors + n * basis_size),sizeof(PetscReal) * basis_size);
std::cerr << "done1" << std::endl;
if (out.fail() || out.bad())
std::cerr << "bad or fail..." << std::endl;
out.close();
std::cerr << "done2" << std::endl;
}
std::cout << "done writing out all evectors?" << std::endl;
}
运行时,该程序永远不会到达“done2”(或“bad or fail...”),但是会到达“done1”。此外,写出的数据也很好(正如我所期望的那样)。
老实说,我不知道为什么会发生这种情况,我想不出“close()”会失败的任何原因。
谢谢你的帮助。
(我开始认为这是某种编译器错误/错误。我正在通过 mpicxx 运行 GCC 4.1.2(!)(我相信是 RHEL 5)