Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Непонятно с передачей ссылки в конструктор


Автор: Fazil6 21.1.2009, 14:58
написал вот такую программу
Код

#include <string>
#include <cppunit/SourceLine.h>

int main()
{
    const std::string f(__FILE__);  // тут вопросов нет. Имеем то что нужно
    CPPUNIT_NS::SourceLine sl(f, __LINE__);  // тут чудеса

    return 0;
}

вобщем про чудеса.
попадая дебагером в конструктор SourceLine вижу вот такую картину
user posted image
естественно, что на этом выполнение моей программы заканчивается.
я полном ступоре.
SourceLine постой класс. Собственно он просто хранит стринговую и интовую переменную. Не от чего не наследуется и никаких изысков не содержит.
Компилируется это VS8.0 без варнингов в MS Server 2003.
Вобщем кто-нибудь имеет какие-нибудь идеи по пооду того что тут происходит.

Автор: Alek86 21.1.2009, 15:11
1. переменная lineNumber нормальна?
2. rebuild all помогает?

у меня было подобное в студии, когда я писал

Код
std::auto_ptr<IBase> pMain(new Derived());

тогда в строке, что хранилась в Derived тоже оказывался Bad Ptr

правда не уверен, что тебе эта инфа поможет

Автор: Andrey44 21.1.2009, 15:26
Fazil6, вы в режиме дебаг смотрите?

Добавлено через 6 минут и 26 секунд
Так тоже не проходит?
Код

#include <string>
#include <cppunit/SourceLine.h>
int main()
{
    CPPUNIT_NS::SourceLine sl(const std::string(__FILE__), __LINE__);  // тут чудеса
    return 0;
}

Автор: vinter 21.1.2009, 15:33
Fazil6, не пробовал смотреть че там происходит на уровнее асма?

Автор: Fazil6 21.1.2009, 15:50
мда...
Вобщем ясности не добавилось.
Цитата(Alek86 @  21.1.2009,  15:11 Найти цитируемый пост)
1. переменная lineNumber нормальна?

кстати да. Эта тоже кривая. От нее просто ничего не зависит и что в ней особого значения не имеет.
Цитата(Alek86 @  21.1.2009,  15:11 Найти цитируемый пост)
2. rebuild all помогает?

нет конечно.
Цитата(Andrey44 @  21.1.2009,  15:26 Найти цитируемый пост)
Fazil6, вы в режиме дебаг смотрите?

а вот это помогает.
В релизе все нормально
Цитата(Andrey44 @  21.1.2009,  15:26 Найти цитируемый пост)
Так тоже не проходит?

не. Никакими подобными вариантам результат в дебаге не меняется


Цитата(vinter @  21.1.2009,  15:33 Найти цитируемый пост)
Fazil6, не пробовал смотреть че там происходит на уровнее асма? 

я в асме специалист мягко говоря средненький. Вот чего имеем
 
Код

int main()
{
004114B0  push        ebp  
004114B1  mov         ebp,esp 
004114B3  push        0FFFFFFFFh 
004114B5  push        offset __ehhandler$_main (4142D2h) 
004114BA  mov         eax,dword ptr fs:[00000000h] 
004114C0  push        eax  
004114C1  sub         esp,128h 
004114C7  push        ebx  
004114C8  push        esi  
004114C9  push        edi  
004114CA  lea         edi,[ebp-134h] 
004114D0  mov         ecx,4Ah 
004114D5  mov         eax,0CCCCCCCCh 
004114DA  rep stos    dword ptr es:[edi] 
004114DC  mov         eax,dword ptr [___security_cookie (418034h)] 
004114E1  xor         eax,ebp 
004114E3  mov         dword ptr [ebp-10h],eax 
004114E6  push        eax  
004114E7  lea         eax,[ebp-0Ch] 
004114EA  mov         dword ptr fs:[00000000h],eax 
    const std::string f(__FILE__);
004114F0  mov         esi,esp 
004114F2  push        offset string "d:\\source\\unte\\unte\\main.cpp" (4167FCh) 
004114F7  lea         ecx,[ebp-34h] 
004114FA  call        dword ptr [__imp_std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > (4192B0h)] 
00411500  cmp         esi,esp 
00411502  call        @ILT+400(__RTC_CheckEsp) (411195h) 
00411507  mov         dword ptr [ebp-4],0 
    CPPUNIT_NS::SourceLine sl(f, __LINE__);
0041150E  mov         eax,dword ptr [`main'::`2'::__LINE__Var (418004h)] 
00411513  add         eax,2 
00411516  push        eax  
00411517  lea         ecx,[ebp-34h] 
0041151A  push        ecx  
0041151B  lea         ecx,[ebp-64h] 
0041151E  call        CppUnit::SourceLine::SourceLine (41122Bh) 


Добавлено через 3 минуты и 18 секунд
Все. Всем спасибо - все свободны. Просто линковать в релизе и дебаге нужно было разные либы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)