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:
l'erreur retournée est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()
La cause de cette erreur est le delete (n1);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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![]()
Partager