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
Phase:
public
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.