Автор
|
Тема: help,plz
|
ArtMaster |
опубликован 20-01-2001 20:07 MSK
Мужики,помогите разобраться с указателями под 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
тыб кусок кода кинул чтоль.в борланде компилер мяхко говоря не очч. он и методы дружественных классов не сечет ... и, напрмер, на char * c_p1 = new char[10]; c_p1[11] = 123; ничего не скажет. да и интерфейсы ком-объектов из либы криво грузит (#import <lib.dll>) ... PS: под MS - на MS // imho.
|
Jimmy
|
опубликован 21-01-2001 19:26 MSK
С lamo согласен на 100%. Код бы глянуть. Чаще всего такие штуки возникают, когда обращаешься к массиву (строке особенно), размер которого возвращает другая функция. Там нужн внимательно смотреть, что возвращается: размер в байтах или кол-во эл-тов. Для строки еще возможны варианты возврата длины с учетом конечного нуля или без учета... А вообще, процесс перехода от Borland к VC будет несколько мучительным, но не сильно долгим, и сопровождаться будет растущей радостью от того, что больше с Borland связываться не придется. |
OlegN
|
опубликован 05-02-2001 16:46 MSK
Тут и без исходника могу сказать, что на 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 не создается. |