From 03f34824b49e83864e4fd39c7aa793d2018fa896 Mon Sep 17 00:00:00 2001 From: tqchen Date: Wed, 11 Mar 2015 09:43:42 -0700 Subject: [PATCH] some potential fix --- src/gbm/gbtree-inl.hpp | 8 ++++---- src/tree/model.h | 10 ++++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/gbm/gbtree-inl.hpp b/src/gbm/gbtree-inl.hpp index 66b03dd87..d2ff2358b 100644 --- a/src/gbm/gbtree-inl.hpp +++ b/src/gbm/gbtree-inl.hpp @@ -69,11 +69,11 @@ class GBTree : public IGradBooster { trees[i]->SaveModel(fo); } if (tree_info.size() != 0) { - fo.Write(&tree_info[0], sizeof(int) * tree_info.size()); + fo.Write(BeginPtr(tree_info), sizeof(int) * tree_info.size()); } if (mparam.num_pbuffer != 0 && with_pbuffer) { - fo.Write(&pred_buffer[0], pred_buffer.size() * sizeof(float)); - fo.Write(&pred_counter[0], pred_counter.size() * sizeof(unsigned)); + fo.Write(BeginPtr(pred_buffer), pred_buffer.size() * sizeof(float)); + fo.Write(BeginPtr(pred_counter), pred_counter.size() * sizeof(unsigned)); } } // initialize the predic buffer @@ -99,7 +99,7 @@ class GBTree : public IGradBooster { std::vector *in_gpair) { const std::vector &gpair = *in_gpair; std::vector > new_trees; - if (mparam.num_output_group == 1) { + if (mparam.num_output_group == 1) { new_trees.push_back(BoostNewTrees(gpair, p_fmat, buffer_offset, info, 0)); } else { const int ngroup = mparam.num_output_group; diff --git a/src/tree/model.h b/src/tree/model.h index 4d325ea8c..4eea34911 100644 --- a/src/tree/model.h +++ b/src/tree/model.h @@ -296,9 +296,10 @@ class TreeModel { utils::Check(fi.Read(¶m, sizeof(Param)) > 0, "TreeModel: wrong format"); nodes.resize(param.num_nodes); stats.resize(param.num_nodes); - utils::Check(fi.Read(&nodes[0], sizeof(Node) * nodes.size()) > 0, + utils::Assert(param.num_nodes != 0, "invalid model"); + utils::Check(fi.Read(BeginPtr(nodes), sizeof(Node) * nodes.size()) > 0, "TreeModel: wrong format"); - utils::Check(fi.Read(&stats[0], sizeof(NodeStat) * stats.size()) > 0, + utils::Check(fi.Read(BeginPtr(stats), sizeof(NodeStat) * stats.size()) > 0, "TreeModel: wrong format"); if (param.size_leaf_vector != 0) { utils::Check(fi.Read(&leaf_vector), "TreeModel: wrong format"); @@ -322,8 +323,9 @@ class TreeModel { utils::Assert(param.num_nodes == static_cast(stats.size()), "Tree::SaveModel"); fo.Write(¶m, sizeof(Param)); - fo.Write(&nodes[0], sizeof(Node) * nodes.size()); - fo.Write(&stats[0], sizeof(NodeStat) * nodes.size()); + utils::Assert(param.num_nodes != 0, "invalid model"); + fo.Write(BeginPtr(nodes), sizeof(Node) * nodes.size()); + fo.Write(BeginPtr(stats), sizeof(NodeStat) * nodes.size()); if (param.size_leaf_vector != 0) fo.Write(leaf_vector); } /*!