@@ -1599,24 +1599,22 @@ Simulation_impl::checkpoint(const std::string& checkpoint_filename)
15991599 SST::Core::Serialization::serializer ser;
16001600 ser.enable_pointer_tracking ();
16011601
1602- size_t size, buffer_size;
1603- char * buffer;
1602+ size_t size;
16041603
16051604 /* Section 2: Loaded libraries */
16061605 ser.start_sizing ();
16071606 std::set<std::string> libnames;
16081607 factory->getLoadedLibraryNames (libnames);
16091608 ser& libnames;
16101609
1611- size = ser.size ();
1612- buffer_size = size;
1613- buffer = new char [buffer_size];
1610+ size = ser.size ();
1611+ std::vector<char > buffer (size);
16141612
1615- ser.start_packing (buffer, size);
1613+ ser.start_packing (& buffer[ 0 ] , size);
16161614 ser& libnames;
16171615
16181616 fs.write (reinterpret_cast <const char *>(&size), sizeof (size));
1619- fs.write (buffer, size);
1617+ fs.write (& buffer[ 0 ] , size);
16201618 offset += (sizeof (size) + size);
16211619
16221620
@@ -1658,14 +1656,10 @@ Simulation_impl::checkpoint(const std::string& checkpoint_filename)
16581656 ser& timeVortex;
16591657
16601658 size = ser.size ();
1661- if ( size > buffer_size ) {
1662- delete[] buffer;
1663- buffer_size = size;
1664- buffer = new char [buffer_size];
1665- }
1659+ buffer.resize (size);
16661660
16671661 // Pack buffer
1668- ser.start_packing (buffer, size);
1662+ ser.start_packing (& buffer[ 0 ] , size);
16691663 ser& num_ranks;
16701664 ser& my_rank;
16711665 ser& currentSimCycle;
@@ -1703,7 +1697,7 @@ Simulation_impl::checkpoint(const std::string& checkpoint_filename)
17031697
17041698 // Write buffer to file
17051699 fs.write (reinterpret_cast <const char *>(&size), sizeof (size));
1706- fs.write (buffer, size);
1700+ fs.write (& buffer[ 0 ] , size);
17071701 offset += (sizeof (size) + size);
17081702
17091703 size = compInfoMap.size ();
@@ -1719,24 +1713,18 @@ Simulation_impl::checkpoint(const std::string& checkpoint_filename)
17191713 ComponentInfo* compinfo = *comp;
17201714 ser& compinfo;
17211715 size = ser.size ();
1716+ buffer.resize (size);
17221717
1723- if ( buffer_size < size ) {
1724- delete[] buffer;
1725- buffer = new char [size];
1726- buffer_size = size;
1727- }
1728-
1729- ser.start_packing (buffer, size);
1718+ ser.start_packing (&buffer[0 ], size);
17301719 ser& compinfo;
17311720
17321721 component_blob_offsets_.emplace_back (compinfo->id_ , offset);
17331722 fs.write (reinterpret_cast <const char *>(&size), sizeof (size));
1734- fs.write (buffer, size);
1723+ fs.write (& buffer[ 0 ] , size);
17351724 offset += (sizeof (size) + size);
17361725 }
17371726
17381727 fs.close ();
1739- delete[] buffer;
17401728
17411729 /*
17421730 * Still needs to be added to checkpoint:
@@ -1769,19 +1757,17 @@ Simulation_impl::restart(Config* cfg)
17691757 }
17701758 fs.close ();
17711759
1772- size_t size, buffer_size;
1773- char * buffer;
1760+ size_t size;
17741761 SST::Core::Serialization::serializer ser;
17751762 ser.enable_pointer_tracking ();
17761763 std::ifstream fs_blob (blob_filename, std::ios::binary);
17771764
17781765 /* Begin deserialization, libraries */
17791766 fs_blob.read (reinterpret_cast <char *>(&size), sizeof (size));
17801767
1781- buffer_size = size;
1782- buffer = new char [buffer_size];
1783- fs_blob.read (buffer, size);
1784- ser.start_unpacking (buffer, size);
1768+ std::vector<char > buffer (size);
1769+ fs_blob.read (&buffer[0 ], size);
1770+ ser.start_unpacking (&buffer[0 ], size);
17851771
17861772 std::set<std::string> libnames;
17871773 ser& libnames;
@@ -1791,14 +1777,10 @@ Simulation_impl::restart(Config* cfg)
17911777
17921778 /* Now get the global blob */
17931779 fs_blob.read (reinterpret_cast <char *>(&size), sizeof (size));
1794- if ( size > buffer_size ) {
1795- delete[] buffer;
1796- buffer_size = size;
1797- buffer = new char [buffer_size];
1798- }
1799- fs_blob.read (buffer, size);
1780+ buffer.resize (size);
1781+ fs_blob.read (&buffer[0 ], size);
18001782
1801- ser.start_unpacking (buffer, size);
1783+ ser.start_unpacking (& buffer[ 0 ] , size);
18021784
18031785 ser& num_ranks;
18041786 ser& my_rank;
@@ -1860,20 +1842,15 @@ Simulation_impl::restart(Config* cfg)
18601842 // Deserialize component blobs individually
18611843 for ( size_t comp = 0 ; comp < compCount; comp++ ) {
18621844 fs_blob.read (reinterpret_cast <char *>(&size), sizeof (size));
1863- if ( size > buffer_size ) {
1864- delete[] buffer;
1865- buffer_size = size;
1866- buffer = new char [buffer_size];
1867- }
1868- fs_blob.read (buffer, size);
1869- ser.start_unpacking (buffer, size);
1845+ buffer.resize (size);
1846+ fs_blob.read (&buffer[0 ], size);
1847+ ser.start_unpacking (&buffer[0 ], size);
18701848 ComponentInfo* compInfo = new ComponentInfo ();
18711849 ser& compInfo;
18721850 compInfoMap.insert (compInfo);
18731851 }
18741852
18751853 fs_blob.close ();
1876- delete[] buffer;
18771854
18781855 // If we are a parallel job, need to call
18791856 // finalizeLinkConfigurations() in order to finish setting up all
0 commit comments