Hi Kenton,

You were right, it was the order of initialization. I should have checked 
that first.  I have now added the all warnings option to the compiler.

Thank you.

Sune.

On Wednesday, September 4, 2019 at 8:35:43 PM UTC-7, Kenton Varda wrote:
>
> Hi Sune,
>
> In what order are m_message and m_myMsgBuilder declared in the class? My 
> guess is that m_myMsgBuilder is declared before m_message. As a result, the 
> compiler will re-order the initializations such that m_myMsgBuilder is 
> initialized first. This means your code is calling m_message.initRoot when 
> m_message is not yet constructed, resulting in undefined behavior. (Most 
> compilers will give you a warning about this...)
>
> -Kenton
>
> On Wed, Sep 4, 2019 at 7:04 PM Sune S <[email protected] <javascript:>> 
> wrote:
>
>>
>> Hi 
>>
>> I have a Class that instantiates a MallocMessageBuilder and initializes 
>> its root to a custom struct. I notice a segfault when I construct the 
>> custom struct's builder in the constructor's initializer list.
>>
>>   *// Construction that leads to a seg fault*
>>
>>   MyMessageBuilder() 
>>
>>   : m_message(),
>>
>>     m_myMsgBuilder(m_message.initRoot<MyMessage>())
>>
>>   {
>>
>>     // The program seg faults in the following line.
>>
>>     m_myMsgBuilder.initSomeStruct();
>>
>>   }
>>
>>
>>   *// Alternate construction does not crash*
>>
>>   MyMessageBuilder() 
>>
>>   : m_message(),
>>
>>     m_myMsgBuilder(nullptr)
>>
>>   {
>>
>>     m_myMsgBuilder = m_message.initRoot<MyMessage>();
>>
>>     m_myMsgBuilder.initSomeStruct();
>>
>>   }
>>
>>
>> 0x00000000004059a0 in 
>> capnp::_::DirectWireValue<MyMessage::Which>::set(MyMessage::Which) ()
>>
>> 0x00000000004056fe in void 
>> capnp::_::StructBuilder::setDataField<MyMessage::Which>(unsigned int, 
>> kj::NoInfer_<MyMessage::Which>::Type) ()
>>
>> 0x000000000040551d in MyMessage::Builder::initSomeStruct() ()
>>
>>
>> What could be causing the seg fault?
>>
>>
>> Thanks
>>
>> Sune
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Cap'n Proto" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/capnproto/23b59bc8-bfa3-4e3d-964d-7bfdf2fca5fe%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/capnproto/23b59bc8-bfa3-4e3d-964d-7bfdf2fca5fe%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/capnproto/7167e096-3cef-4252-bbc5-7502a1ebb3ac%40googlegroups.com.

Reply via email to