diff --git a/dlib/serialize.h b/dlib/serialize.h index a954ddb44..d8e4057af 100644 --- a/dlib/serialize.h +++ b/dlib/serialize.h @@ -893,7 +893,8 @@ namespace dlib { const unsigned long size = static_cast(item.size()); serialize(size,out); - out.write(&item[0], item.size()); + if (item.size() != 0) + out.write(&item[0], item.size()); } catch (serialization_error& e) { throw serialization_error(e.info + "\n while serializing object of type std::vector"); } @@ -910,7 +911,8 @@ namespace dlib unsigned long size; deserialize(size,in); item.resize(size); - in.read(&item[0], item.size()); + if (item.size() != 0) + in.read(&item[0], item.size()); } catch (serialization_error& e) { throw serialization_error(e.info + "\n while deserializing object of type std::vector"); } @@ -928,7 +930,8 @@ namespace dlib { const unsigned long size = static_cast(item.size()); serialize(size,out); - out.write((char*)&item[0], item.size()); + if (item.size() != 0) + out.write((char*)&item[0], item.size()); } catch (serialization_error& e) { throw serialization_error(e.info + "\n while serializing object of type std::vector"); } @@ -945,7 +948,8 @@ namespace dlib unsigned long size; deserialize(size,in); item.resize(size); - in.read((char*)&item[0], item.size()); + if (item.size() != 0) + in.read((char*)&item[0], item.size()); } catch (serialization_error& e) { throw serialization_error(e.info + "\n while deserializing object of type std::vector"); } diff --git a/dlib/test/serialize.cpp b/dlib/test/serialize.cpp index 9c502451f..af6da4793 100644 --- a/dlib/test/serialize.cpp +++ b/dlib/test/serialize.cpp @@ -528,6 +528,14 @@ namespace { DLIB_TEST(a[i] == b[i]); } + + std::vector c; + sout.str(""); + dlib::serialize(c, sout); + sin.str(sout.str()); + dlib::deserialize(a, sin); + DLIB_TEST(a.size() == 0); + DLIB_TEST(c.size() == 0); } void test_vector_bool (