Debug mode has a lot more padding between memory allocations typically.
This call:
vgui::localize()->ConvertANSIToUnicode( sString, unicode, 1024)

Would cause a random piece of memory 512 bytes beyond the end of
"unicode" to be zero to 0 (null terminating the unicode string). In
debug you were probably zeroing unused memory so it had no impact, in
release you were smashing the stack or the like causing a crash. Moral
is, use sizeof(<variable>) when passing in buffer length parameters,
never hard code them :)

- Alfred

Benjamin Davison wrote:
> --
> [ Picked text/plain from multipart/alternative ]
> Thanks Jay, I'll take those pointers away(rim shot) when I rewrite it
> in
> accordance with Alfred's suggestions.
>
> Still confusing that it worked in debug mode but displayed nothing in
> release mode.
>
> On 3/30/06, Jay Stelly <[EMAIL PROTECTED]> wrote:
>>
>> Actually looking at the code you're using, you probably should just
>> skip string_t entirely (since the unicode conversion takes a char *
>> anyway):
>>
>> const char *pString = "";
>>
>> then replace sString with pString...
>>
>> Jay
>>
>>
>>> -----Original Message-----
>>> From: [EMAIL PROTECTED]
>>> [mailto:[EMAIL PROTECTED] On Behalf Of Jay
>>> Stelly Sent: Thursday, March 30, 2006 11:02 AM
>>> To: [email protected]
>>> Subject: RE: [hlcoders] Works in debug mode, does not it release
>>> mode.
>>>
>>> Unless someone has defined a valid assignment or conversion
>>> path for this that I don't normally use you have to do this
>>> to your constant
>>> strings:
>>>
>>>>         sString = MAKE_STRING("Find the case!");
>>>
>>> at least that's why MAKE_STRING exists in the first place.
>>>
>>> It's not surprising that ConvertANSIToUnicode() would crash
>>> if these assignments were producing an invalid pointer.
>>>
>>> Jay
>>>
>>>
>>>> -----Original Message-----
>>>> From: [EMAIL PROTECTED]
>>>> [mailto:[EMAIL PROTECTED] On Behalf Of
>>>> Benjamin Davison Sent: Thursday, March 30, 2006 10:50 AM
>>>> To: [email protected]
>>>> Subject: [hlcoders] Works in debug mode, does not it release mode.
>>>>
>>>> --
>>>> [ Picked text/plain from multipart/alternative ] Very weird indeed,
>>>> I'm working on some VGUI code and for some reason it works in debug
>>>> mode with the IDE attatched and fails to work in release mode, and
>>>> for the life of me I am stumped for a soloution. Here is some code
>>>> to see if you guys have run into this problem.
>>>>
>>>> void CBBHudTaskList::Paint( void )
>>>> {
>>>>     // getting a pointer to the game rules
>>>>     CHL2MPRules *pRules = HL2MPRules();
>>>>     if ( !pRules )
>>>>         return;
>>>>     // local player
>>>>     C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();     if
>>>>         ( !pPlayer ) return;
>>>>
>>>>     string_t sString = "";
>>>>     wchar_t unicode[256];
>>>>
>>>>     int x, y;
>>>>     int textSizeWide, textSizeTall;
>>>>     int iShown = 0; // number of lines shown
>>>>     int fontTall = vgui::surface()->GetFontTall( m_hLargeFont );
>>>> int border = 20;
>>>>
>>>>     x = border / 2; // ScreenWidth() - border - textSizeWide;
>>>>     y = iShown * fontTall; // border + iShown * fontTall;
>>>>
>>>>     SetSize( 300 + border, 40 );
>>>>
>>>>
>>>>     if (pRules->m_bCaptureObjectActive == true)
>>>>     {
>>>>         sString = "Find the case!";
>>>>     }
>>>>     else if (pRules->m_bCaptureZoneActivated == true)     {
>>>>         sString = "Get to this location and do something";     }
>>>>     else
>>>>     {
>>>>         sString = "No mission selected!";
>>>>     }
>>>>
>>>>     vgui::localize()->ConvertANSIToUnicode( sString, unicode, 256);
>>>>
>>>>     // --- Set up default font and get character height for line
>>>>     spacing vgui::surface()->DrawSetTextFont( m_hLargeFont );
>>>>     //vgui::surface()->DrawSetTextFont( m_hLargeFont );
>>>>     vgui::surface()->DrawSetTextPos(x, y);
>>>>     vgui::surface()->DrawPrintText( unicode, wcslen(unicode) ); //
>>>> print text
>>>>
>>>>     BaseClass::Paint();
>>>> }
>>>>
>>>> Now for some reason vgui::localize()->ConvertANSIToUnicode(
>>>> sString, unicode, 256); was crashing the release mode(not the
>>>> debug) if I put the buffer to 1024
>>>>
>>>> Have any of you guys run into this problem? Or can you see some
>>>> error I have overlooked?
>>>>
>>>> --
>>>> - Benjamin Davison
>>>> --
>>>>
>>>> _______________________________________________
>>>> To unsubscribe, edit your list preferences, or view the list
>>>> archives, please visit:
>>>> http://list.valvesoftware.com/mailman/listinfo/hlcoders
>>>>
>>>>
>>>
>>> _______________________________________________
>>> To unsubscribe, edit your list preferences, or view the list
>>> archives, please visit:
>>> http://list.valvesoftware.com/mailman/listinfo/hlcoders
>>>
>>>
>>
>> _______________________________________________
>> To unsubscribe, edit your list preferences, or view the list
>> archives, please visit:
>> http://list.valvesoftware.com/mailman/listinfo/hlcoders
>>
>>
>
>
> --
> - Benjamin Davison
> --
>
> _______________________________________________
> To unsubscribe, edit your list preferences, or view the list
> archives, please visit:
> http://list.valvesoftware.com/mailman/listinfo/hlcoders

_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please 
visit:
http://list.valvesoftware.com/mailman/listinfo/hlcoders

Reply via email to