WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  help,plz

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   help,plz
ArtMaster опубликован 20-01-2001 20:07 MSK   Click Here to See the Profile for ArtMaster   Click Here to Email ArtMaster  
Мужики,помогите разобраться с указателями под Visual C 6.0. Под Borland C всё шло с указателями, а в VC выдаёт ошибку типа
The instruction at "0x0041c707" referenced memory at "0xcccccccc". The memory could not be "written". Не догоняю сути этой ошибки.
Если кто шарит откуда такое берётся и/или как этого избежать помогите плиз.
lamo опубликован 20-01-2001 22:05 MSK     Click Here to See the Profile for lamo  Click Here to Email lamo     
тыб кусок кода кинул чтоль.

в борланде компилер мяхко говоря
не очч.
он и методы дружественных классов не сечет ...
и, напрмер, на
char * c_p1 = new char[10];
c_p1[11] = 123;
ничего не скажет.

да и интерфейсы ком-объектов из либы
криво грузит (#import <lib.dll>) ...


PS: под MS - на MS // imho.

Jimmy опубликован 21-01-2001 19:26 MSK     Click Here to See the Profile for Jimmy  Click Here to Email Jimmy     
С lamo согласен на 100%. Код бы глянуть.
Чаще всего такие штуки возникают, когда обращаешься к массиву (строке особенно), размер которого возвращает другая функция.
Там нужн внимательно смотреть, что возвращается: размер в байтах или кол-во эл-тов. Для строки еще возможны варианты возврата длины с учетом конечного нуля или без учета...
А вообще, процесс перехода от Borland к VC будет несколько мучительным, но не сильно долгим, и сопровождаться будет растущей радостью от того, что больше с Borland связываться не придется.
OlegN опубликован 05-02-2001 16:46 MSK     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
Тут и без исходника могу сказать, что
на 90% ссылки по адресу типа 0xcccccccc возникают если указатель не инициализирован.
В большинстве случаев бывает так :
class CMyObj
{
public:
CMyObj();
void Init();
protected:
CMyObj2* m_pMyObj2;
};

CMyObj::CMyObj()
{
Init();
}

void CMyObj::Init()
{
if(!m_pMyObj2)
m_pMyObj2 = new CMyObj2();
}
В результате в Debug версии все работает на УРА, так как память распределенная под объект
заполяется нулями и m_pMyObj2 равен нулю до вызова Init-а, а в Release версии при включенной оптимизации в этой переменной что-то вроде 0xcccccccc или 0xdddddddd, ну и соответственно в Init-е CMyObj2 не создается.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.