вот такие дела
class CStr
{
protected:
mutable BOOL m_fDirectAlert;
mutable size_t m_stLength;
size_t m_stMaximumLength;
TCHAR* m_pData;
};
class CMultiStr : protected CStr
{
protected:
mutable size_t m_stCount;
public:
void* BufferPtr();
};
void* CMultiStr::BufferPtr()
{
m_fDirectAlert = 1;
return m_pData;
}
До вызова m_stCount = 0; m_fDirectAlert = 0; m_stLength = 0
Вызываю BufferPtr()
CMultiStr mstr;
mstr.BufferPtr();
После этого m_stCount = 1; m_fDirectAlert = 0; m_stLength = 1. Причем в Visual C все работает.
Использую Borland® C++Builder® for Microsoft® Windows™ Version 10.0.2166.28377 Copyright © 2005 Borland® Software Corporation. All Rights Reserved. Update 1
Смотрел дизассемблером какая то чертовщина.
void* CMultiStr::BufferPtr()
0040D760 55 push ebp
0040D761 8BEC mov ebp,esp
m_fDirectAlert = 1;
0040D763 8B4508 mov eax,[ebp+$08]
0040D766 C7401001000000 mov [eax+$10],$00000001 //Вот в этом месте ячейка памяти [eax+$10] остается равной 0!!!
return m_pData;
0040D76D 8B5508 mov edx,[ebp+$08]
0040D770 8B421C mov eax,[edx+$1c]
Помогите!!!