# HG changeset patch
# User Balazs Dezso <deba@inf.elte.hu>
# Date 1223233741 -7200
# Node ID 7c796c1cf1b094ce098b8a02a85336425c22c970
# Parent cbe3ec2d59d2d7c539ab62f2ca6796c960795237
Fix memory leak hazard
If the constructor throws an exception, it should deallocate each
dynamically allocated memory.
diff -r cbe3ec2d59d2 -r 7c796c1cf1b0 lemon/lgf_reader.h
a
|
b
|
|
517 | 517 | _filename(fn), _digraph(digraph), |
518 | 518 | _use_nodes(false), _use_arcs(false), |
519 | 519 | _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 | } |
521 | 524 | } |
522 | 525 | |
523 | 526 | /// \brief Constructor |
… |
… |
|
529 | 532 | _filename(fn), _digraph(digraph), |
530 | 533 | _use_nodes(false), _use_arcs(false), |
531 | 534 | _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 | } |
533 | 539 | } |
534 | 540 | |
535 | 541 | /// \brief Destructor |
… |
… |
|
1308 | 1314 | _filename(fn), _graph(graph), |
1309 | 1315 | _use_nodes(false), _use_edges(false), |
1310 | 1316 | _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 | } |
1312 | 1321 | } |
1313 | 1322 | |
1314 | 1323 | /// \brief Constructor |
… |
… |
|
1320 | 1329 | _filename(fn), _graph(graph), |
1321 | 1330 | _use_nodes(false), _use_edges(false), |
1322 | 1331 | _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 | } |
1324 | 1336 | } |
1325 | 1337 | |
1326 | 1338 | /// \brief Destructor |
… |
… |
|
2094 | 2106 | SectionReader(const std::string& fn) |
2095 | 2107 | : _is(new std::ifstream(fn.c_str())), local_is(true), |
2096 | 2108 | _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 | } |
2098 | 2113 | } |
2099 | 2114 | |
2100 | 2115 | /// \brief Constructor |
… |
… |
|
2103 | 2118 | SectionReader(const char* fn) |
2104 | 2119 | : _is(new std::ifstream(fn)), local_is(true), |
2105 | 2120 | _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 | } |
2107 | 2125 | } |
2108 | 2126 | |
2109 | 2127 | /// \brief Destructor |
… |
… |
|
2386 | 2404 | /// file. |
2387 | 2405 | LgfContents(const std::string& fn) |
2388 | 2406 | : _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 | } |
2390 | 2411 | } |
2391 | 2412 | |
2392 | 2413 | /// \brief Constructor |
… |
… |
|
2395 | 2416 | /// file. |
2396 | 2417 | LgfContents(const char* fn) |
2397 | 2418 | : _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 | } |
2399 | 2423 | } |
2400 | 2424 | |
2401 | 2425 | /// \brief Destructor |
diff -r cbe3ec2d59d2 -r 7c796c1cf1b0 lemon/lgf_writer.h
a
|
b
|
|
463 | 463 | DigraphWriter(const Digraph& digraph, const std::string& fn) |
464 | 464 | : _os(new std::ofstream(fn.c_str())), local_os(true), _digraph(digraph), |
465 | 465 | _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 | } |
467 | 470 | } |
468 | 471 | |
469 | 472 | /// \brief Constructor |
… |
… |
|
473 | 476 | DigraphWriter(const Digraph& digraph, const char* fn) |
474 | 477 | : _os(new std::ofstream(fn)), local_os(true), _digraph(digraph), |
475 | 478 | _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 | } |
477 | 483 | } |
478 | 484 | |
479 | 485 | /// \brief Destructor |
… |
… |
|
1024 | 1030 | GraphWriter(const Graph& graph, const std::string& fn) |
1025 | 1031 | : _os(new std::ofstream(fn.c_str())), local_os(true), _graph(graph), |
1026 | 1032 | _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 | } |
1028 | 1037 | } |
1029 | 1038 | |
1030 | 1039 | /// \brief Constructor |
… |
… |
|
1034 | 1043 | GraphWriter(const Graph& graph, const char* fn) |
1035 | 1044 | : _os(new std::ofstream(fn)), local_os(true), _graph(graph), |
1036 | 1045 | _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 | } |
1038 | 1050 | } |
1039 | 1051 | |
1040 | 1052 | /// \brief Destructor |
… |
… |
|
1587 | 1599 | /// Construct a section writer, which writes into the given file. |
1588 | 1600 | SectionWriter(const std::string& fn) |
1589 | 1601 | : _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 | } |
1591 | 1606 | } |
1592 | 1607 | |
1593 | 1608 | /// \brief Constructor |
… |
… |
|
1595 | 1610 | /// Construct a section writer, which writes into the given file. |
1596 | 1611 | SectionWriter(const char* fn) |
1597 | 1612 | : _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 | } |
1599 | 1617 | } |
1600 | 1618 | |
1601 | 1619 | /// \brief Destructor |