ошибка сегментации в cppunit во время очистки

Сбой CPPUNIT после выполнения моей программы при возврате из основного на этапе очистки. Dtor TestWrapping вызывает dtor TestSuite, который затем вызывает deleteContents, который запускает очистку тестовых случаев.

Что странного в том, что dtor TestSuite вызывается дважды?
Это следует за успешным выполнением 6 тестовых случаев. Любая идея о том, как этого можно избежать?

    Program terminated with signal 11, Segmentation fault.
#0  0x0000000000000045 in ?? ()
(gdb) bt
#0  0x0000000000000045 in ?? ()
#1  0x0000000000000001 in ?? ()
#2  0x0000000001004f2d in CppUnit::TestSuite::~TestSuite (this=0x7fe7bc005820, __in_chrg=<optimized out>) at TestSuite.cpp:18
#3  0x0000000001004ebd in CppUnit::TestSuite::deleteContents (this=0x7fe7bc001040) at TestSuite.cpp:28
#4  0x000000000100500d in CppUnit::TestSuite::~TestSuite (this=0x7fe7bc005820, __in_chrg=<optimized out>) at TestSuite.cpp:18
#5  0x0000000001004c50 in CppUnit::TestRunner::WrappingSuite::~WrappingSuite (this=0x7fe7bc005820, __in_chrg=<optimized out>) at ../../include/cppunit/TestRunner.h:101
#6  0x000000000040b72a in main (argc=0, argv=0x7fff8198bf08) at /project/EAB3_EMC/BRF/lmcgupe/brf/build/../software/brfc_test/BrfcTestMain.cc:447Code exercising this:
(from main)
CppUnit::TextUi::TestRunner runner;
CPPUNIT_NS::TestResult controller;
CPPUNIT_NS::TestResultCollector result;
controller.addListener( &result );

// Show a message as each test starts
//
CppUnit::BriefTestProgressListener listener;
runner.eventManager().addListener(&listener);
controller.addListener( &listener );

// Specify XML output and inform the runner of this format
//
std::ofstream xmlout("test_result.xml");
CppUnit::XmlOutputter* outputter = new CppUnit::XmlOutputter(
&result, xmlout);
runner.setOutputter(outputter);CppUnit::TextOutputter consoleOutputter(&result , std::cout);

runner.addTest(CreateAlarmBackupSuite::suite());
runner.run( controller );

from class CreateAlarmBackupSuite: public CppUnit::TestFixture

static CppUnit::Test *suite()
{

// Create the Test Suite
//
CppUnit::TestSuite *suite = new CppUnit::TestSuite("CreateAlarmBackupSuite");

// Add the test cases

//Crt_Syst_07
suite->addTest(new CppUnit::TestCaller<CreateAlarmBackupSuite>(
"07_Crt_ScheduledBackup_ScheduledSingleEvent_SystemDataBackup_Non_Successful_Create_Persistent_ManualDelNotClear",
&CreateAlarmBackupSuite::Crt_ScheduledBackup_ScheduledSingleEvent_SystemDataBackup_Non_Successful_Create_Persistent_ManualDelNotClear));//Crt_Syst_09
suite->addTest(new CppUnit::TestCaller<CreateAlarmBackupSuite>(
"09_Crt_ScheduledBackup_ScheduledSingleEvent_SystemDataBackup_Non_Successful_Create_Transient_NoRetry",
&CreateAlarmBackupSuite::Crt_ScheduledBackup_ScheduledSingleEvent_SystemDataBackup_Non_Successful_Create_Transient_NoRetry));

return suite;
}

0

Решение

Я надеюсь, что ваш код явно не вызывает деструкторы этих объектов, но либо вызывает delete на указатель на них, иначе они выходят из области видимости, и компилятор автоматически вызывает их деструкторы. Предполагая, что вы явно не вызываете деструкторы …..

Казалось бы, ваш объект TestSuite либо делает delete this или же он содержит указатель на себя (или получает указатель на себя каким-либо образом в deleteContents ()) и затем вызывает delete на этот указатель. Вы не разместили источник для вашего TestSuite класс (и конкретно его deleteContents() метод), но это мое предположение, не увидев код.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]