根 - 填充失败分支:内存驻留树
Root - failed filling branch : memory-resident tree
我正在尝试合并树:
string filename_;
TList *list = new TList;
///Loop on all .root output files
for (int i = 1; i < 13; ++i) {
string filename_ = "file_";
string file_extension = ".root";
stringstream ss;
ss << i;
string str = ss.str();
filename_ = filename_+str+file_extension;
const char* c_filename = filename_.c_str();
TFile *file_adress = TFile::Open(c_filename);
TTree *tree_adress = (TTree*)file_adress->Get("pulses");
list->Add(tree_adress);
}
// Output tree:
TTree *TPulses = TTree::MergeTrees(list);
但是我收到此错误,这是悄悄明确的:
Error in <TTree::Fill>: Failed filling branch:pulses.pulse_time, nbytes=-1, entry=115710
This error is symptomatic of a Tree created as a memory-resident Tree
Instead of doing:
TTree *T = new TTree(...)
TFile *f = new TFile(...)
you should do:
TFile *f = new TFile(...)
TTree *T = new TTree(...)
但是我在 for 循环中的 TTree 之前创建 TFile,所以我不明白。有人有想法吗?
您看到的错误消息来自您正在写入的TTree
。据我了解您的代码,TFile *file_adress
和TTree *tree_adress
已打开以供读取,您写信给TTree *TPulses
.我没有看到TFile::Open
的默认设置(如果READ
为只读或update
用于操作内容),但从您的输出中,我声称TPulses
不是在您打开的最后一个文件中创建的,而是在 RAM 中创建的,并且您用完了(请参阅文档)。一种常见的模式是在创建TPulses
之前创建一个输出文件:
TFile* outputfile = TFile::Open("output.root", "recreate");
TTree* TPulses = TTree::MergeTrees(list);
// ...
TPulses->Write();
outputfile->Close();
delete outputfile;
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- IPC使用多个管道和分支进程来运行Python程序
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Clang++ 6.0 内存清理器未报告返回值指示条件分支的函数中的未初始化局部变量
- C++ map[]= 内存分支
- 根 - 填充失败分支:内存驻留树
- c++分支上父级和子级之间的共享内存