我正在尝试序列化几个文本文件,并且我有这样的功能:
void to_file_px(Ciphertext* encryptedPx, int index) {
// Serialize Pixel i
//red
filebuf* fbCipherR; // EDIT: THIS LINE IS PROBLEMATIC
string* filenameR = new string("../serialization/pixels/px" + to_string(index) + "R.txt");
fbCipherR -> open((*filenameR).c_str(), std::ios::out|std::ios::binary);
ostream* osCipherR = new ostream(fbCipherR);
encryptedPx[0].Ciphertext::save((*osCipherR));
fbCipherR -> close();
delete filenameR;
delete fbCipherR;
delete osCipherR;
//green
//blue
delete[] encryptedPx;
}
但是,此函数会导致错误为 Segmentation fault (core dumped)
。
我可以知道究竟是什么导致了错误吗?
注: Ciphertext::save
来自微软SEAL
好吧,我犯了一个错误。我没有初始化 filebuf*
。
所以我改变了 filebuf* fbCipherR = new filebuf();
我得到了一个新的错误信息:
terminate called after throwing an instance of 'std::runtime_error'
what(): I/O error
Aborted (core dumped)
原文由 Taihouuuuuuuuuuu 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的异常可能是由于打开文件失败,您应该在使用之前检查缓冲区/流的状态。
您可以通过使用
ofstream
而不是filebuf
并将所有内容放在堆栈上而不是堆分配来简化您的代码: