Встроенная функция: место чтения нарушения доступа 0xcdcdcdd5?

Я столкнулся со странной проблемой, когда я получал исключение во время выполнения с сообщением:
Unhandled exception at 0x0137d451 in I2cTlmTest.exe: 0xC0000005: Access violation reading location 0xcdcdcdd5.

Я получаю это сообщение при создании объекта «C». Я отладил его, но ничего не мог сделать, потому что значения переменных (указателя) (и this указатель) устанавливаются в (0xcdcdcdcd), как только отладка достигает точки останова в B::getHelper функция класса B, Я искал возможных виновников, думая, что переменные не могут быть инициализированы или могут быть удалены до того, как я достигну функции. Но в A::getHelper Функция все переменные инициализируются и исчезают, когда я вхожу в B::getHelper функции и установлены магические значения.

После небольшой пробной отладки я просто переместил default-inline A::getHelper к A.cpp. И, к моему удивлению, мое приложение запустилось. Я решил свою проблему, но не знаю, почему встроенная функция в A вызывает проблемы. Любая помощь высоко ценится. Извините за длинный вопрос, но другого выбора не было.

Я попытался создать похожий сценарий со следующим фрагментом кода, как мой:

-----classA.h---------
#include"classB.h"
class A
{
public:
// if the definition of `getHelper()` is moved to A.cpp runs fine. But, why ?
Helper* getHelper() const { return ptrB_->getHelper(); }

A()
{
ptrB_ = new B(this);
}
private:
B *ptrB_;
};

----classB.h-----------
class A;

class Helper
{
....
....
};
class B
{

public:
B(A *ptr):ptrA_(ptr){ helper_ = new Helper(); }
Helper* getHelper() const { return helper_; }
private:
A *ptrA_;
Helper *helper_;
};

-------classC.h--------

#include"classA.h"
class C
{
public:
C(A &ref): refA_(ref)
{
helper_ = refA_.getHelper();
}

private:
Helper *helper_;
A &refA_;
};

------main.cpp---------
#include"classC.h"
int main()
{
A *ptrA = new A();
C *ptrC = new C(*ptrA);
return 0;
}

-1

Решение

helper_ не указывает на действительный адрес.

Вы можете сделать что-то вроде этого:

B(A *ptr):ptrA_(ptr){ helper_ = new Helper(); }
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]