COIN-OR::LEMON - Graph Library

Changeset 295:7c796c1cf1b0 in lemon


Ignore:
Timestamp:
10/05/08 21:09:01 (10 years ago)
Author:
Balazs Dezso <deba@…>
Branch:
default
Message:

Fix memory leak hazard

If the constructor throws an exception, it should deallocate each
dynamically allocated memory.

Location:
lemon
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lemon/lgf_reader.h

    r294 r295  
    518518        _use_nodes(false), _use_arcs(false), 
    519519        _skip_nodes(false), _skip_arcs(false) { 
    520       if (!(*_is)) throw IoError("Cannot open file", fn); 
     520      if (!(*_is)) { 
     521        delete _is; 
     522        throw IoError("Cannot open file", fn); 
     523      } 
    521524    } 
    522525 
     
    530533        _use_nodes(false), _use_arcs(false), 
    531534        _skip_nodes(false), _skip_arcs(false) { 
    532       if (!(*_is)) throw IoError("Cannot open file", fn); 
     535      if (!(*_is)) { 
     536        delete _is; 
     537        throw IoError("Cannot open file", fn); 
     538      } 
    533539    } 
    534540 
     
    13091315        _use_nodes(false), _use_edges(false), 
    13101316        _skip_nodes(false), _skip_edges(false) { 
    1311       if (!(*_is)) throw IoError("Cannot open file", fn); 
     1317      if (!(*_is)) { 
     1318        delete _is; 
     1319        throw IoError("Cannot open file", fn); 
     1320      } 
    13121321    } 
    13131322 
     
    13211330        _use_nodes(false), _use_edges(false), 
    13221331        _skip_nodes(false), _skip_edges(false) { 
    1323       if (!(*_is)) throw IoError("Cannot open file", fn); 
     1332      if (!(*_is)) { 
     1333        delete _is; 
     1334        throw IoError("Cannot open file", fn); 
     1335      } 
    13241336    } 
    13251337 
     
    20952107      : _is(new std::ifstream(fn.c_str())), local_is(true), 
    20962108        _filename(fn) { 
    2097       if (!(*_is)) throw IoError("Cannot open file", fn); 
     2109      if (!(*_is)) { 
     2110        delete _is; 
     2111        throw IoError("Cannot open file", fn); 
     2112      } 
    20982113    } 
    20992114 
     
    21042119      : _is(new std::ifstream(fn)), local_is(true), 
    21052120        _filename(fn) { 
    2106       if (!(*_is)) throw IoError("Cannot open file", fn); 
     2121      if (!(*_is)) { 
     2122        delete _is; 
     2123        throw IoError("Cannot open file", fn); 
     2124      } 
    21072125    } 
    21082126 
     
    23872405    LgfContents(const std::string& fn) 
    23882406      : _is(new std::ifstream(fn.c_str())), local_is(true) { 
    2389       if (!(*_is)) throw IoError("Cannot open file", fn); 
     2407      if (!(*_is)) { 
     2408        delete _is; 
     2409        throw IoError("Cannot open file", fn); 
     2410      } 
    23902411    } 
    23912412 
     
    23962417    LgfContents(const char* fn) 
    23972418      : _is(new std::ifstream(fn)), local_is(true) { 
    2398       if (!(*_is)) throw IoError("Cannot open file", fn); 
     2419      if (!(*_is)) { 
     2420        delete _is; 
     2421        throw IoError("Cannot open file", fn); 
     2422      } 
    23992423    } 
    24002424 
  • lemon/lgf_writer.h

    r294 r295  
    464464      : _os(new std::ofstream(fn.c_str())), local_os(true), _digraph(digraph), 
    465465        _skip_nodes(false), _skip_arcs(false) { 
    466       if (!(*_os)) throw IoError("Cannot write file", fn); 
     466      if (!(*_os)) { 
     467        delete _os; 
     468        throw IoError("Cannot write file", fn); 
     469      } 
    467470    } 
    468471 
     
    474477      : _os(new std::ofstream(fn)), local_os(true), _digraph(digraph), 
    475478        _skip_nodes(false), _skip_arcs(false) { 
    476       if (!(*_os)) throw IoError("Cannot write file", fn); 
     479      if (!(*_os)) { 
     480        delete _os; 
     481        throw IoError("Cannot write file", fn); 
     482      } 
    477483    } 
    478484 
     
    10251031      : _os(new std::ofstream(fn.c_str())), local_os(true), _graph(graph), 
    10261032        _skip_nodes(false), _skip_edges(false) { 
    1027       if (!(*_os)) throw IoError("Cannot write file", fn); 
     1033      if (!(*_os)) { 
     1034        delete _os; 
     1035        throw IoError("Cannot write file", fn); 
     1036      } 
    10281037    } 
    10291038 
     
    10351044      : _os(new std::ofstream(fn)), local_os(true), _graph(graph), 
    10361045        _skip_nodes(false), _skip_edges(false) { 
    1037       if (!(*_os)) throw IoError("Cannot write file", fn); 
     1046      if (!(*_os)) { 
     1047        delete _os; 
     1048        throw IoError("Cannot write file", fn); 
     1049      } 
    10381050    } 
    10391051 
     
    15881600    SectionWriter(const std::string& fn) 
    15891601      : _os(new std::ofstream(fn.c_str())), local_os(true) { 
    1590       if (!(*_os)) throw IoError("Cannot write file", fn); 
     1602      if (!(*_os)) { 
     1603        delete _os; 
     1604        throw IoError("Cannot write file", fn); 
     1605      } 
    15911606    } 
    15921607 
     
    15961611    SectionWriter(const char* fn) 
    15971612      : _os(new std::ofstream(fn)), local_os(true) { 
    1598       if (!(*_os)) throw IoError("Cannot write file", fn); 
     1613      if (!(*_os)) { 
     1614        delete _os; 
     1615        throw IoError("Cannot write file", fn); 
     1616      } 
    15991617    } 
    16001618 
Note: See TracChangeset for help on using the changeset viewer.