[Boost.Test]Utiliser des pointeurs standards, erreur à la suppression
Bonjour,
je suis en train d'évaluer Boost pour tester mon code. Seulement il semblerait que de vouloir utiliser Boost.Test avec des pointeurs "non boost" cause quelques problèmes:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #define BOOST_TEST_MAIN
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE "HNode Testing module"
#include <boost/test/unit_test.hpp>
#include "../HNode.h"
BOOST_AUTO_TEST_SUITE(HNodeTest)
BOOST_AUTO_TEST_CASE(testInit) {
// boost::shared_ptr<HNode> n1
HNode* n1 = NULL;
HNode* n2 = NULL;
HNode* n3 = NULL;
BOOST_TEST_MESSAGE("Setup HNodes");
BOOST_CHECK(n1 == NULL);
BOOST_CHECK(n2 == NULL);
BOOST_CHECK(n3 == NULL);
n1 = new HNode('a', 0.004);
n2 = new HNode('e', 0.29);
n3 = new HNode(n1, n2);
BOOST_CHECK(n1->probability() == 0.004);
BOOST_CHECK(n3->probability() == 0.294);
BOOST_CHECK(n2->probability() == 0.29);
BOOST_CHECK(n1->symbol() == 'a');
BOOST_TEST_MESSAGE("Done");
delete (n1);
delete (n2);
delete (n3);
}
BOOST_AUTO_TEST_SUITE_END() |
l'erreur retournée est:
Code:
1 2 3 4 5 6
| #
Running 1 test case...
#
unknown location(0): fatal error in "testInit": memory access violation at address: 0x00000008: no mapping at fault address
#
TestHNode.cpp(27): last checkpoint |
La cause de cette erreur est le delete (n1);
Aurais-je oublié quelque chose ? Sachant que n3 va utiliser les pointeurs n1 et n2 en interne et que la totalité du code fait abstraction des smart pointers, je me vois mal retoucher toutes mes sources pour utiliser Boost et les smart pointers.
N.B.: Le test se passe bien si j'enleve les deletes... mais ça me donne droit à un joli leak :)