• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Access violation reading location 0xFFFFFFFFFFFFFFFF

0 głosów
654 wizyt
pytanie zadane 13 sierpnia 2017 w C i C++ przez wojtekd09 Początkujący (260 p.)
otagowane ponownie 13 sierpnia 2017 przez wojtekd09

Witam,

Mam pewien problem z odwołaniem się do obiektu danej klasy w innej klasie.

Otóż mam następującą klasę:

class CCechy : public CDialog
{
	DECLARE_DYNAMIC(CCechy)

public:
	CCechy(CWnd * pParent = NULL, HBaseView * View = 0);   // standard constructor
	virtual ~CCechy();

	enum { IDD = IDD_DIALOG2 }; //okno dialogowe zawierające drzewo
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	virtual BOOL OnInitDialog();
public:
	CCechyTreeCtrl m_Segment_tree;
	HBaseView	*m_pHView;
	CWnd		*m_parent;

	HTREEITEM InsertItemInTree(HC_KEY key, HTREEITEM position, CTreeCtrl  *TreeCtrl);
	HTREEITEM InsertSegmentList(HC_KEY segkey, HTREEITEM item);
	DECLARE_MESSAGE_MAP()
public:
	HC_KEY		m_baseKey;
	afx_msg void OnBnClickedButton2();
	HTREEITEM InsertGeometryList(HC_KEY segkey, HTREEITEM item);
	HTREEITEM root, test;
	int static ile;
	CEdit m_edit2;
	HTREEITEM FindItemBySegmentKey(HC_KEY segkey, HTREEITEM item);
};

a w niej obiekt klasy CCechyTreeCtrl, a mianowicie m_Segment_tree.

Klasa CCechyTreeCtrl wygląda tak:

class CCechyTreeCtrl : public CTreeCtrl
{
public:

	CCechy * pokaz;

	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult);

};

W niej mam wskaźnik pokaz, który pokazuje na obiekt klasy CCechy.

I teraz w funkcji OnTvnSelchanged chcę odnieść się do obiektu klasy CCechy przez ten wskaźnik.

void CCechyTreeCtrl::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);

	pokaz->ile += 2000;
	
	assert(pokaz->m_Segment_tree);
	
}

Do zmiennej statycznej się odnoszę bez problemu, ale do obiektu już nie, bo przy debugowaniu pojawia się błąd

Access violation reading location 0xFFFFFFFFFFFFFFFF i program przestaje działać.

Co może być tego przyczyną?

komentarz 13 sierpnia 2017 przez jpacanowski VIP (102,400 p.)
Brrr... ten kod w C++... Znowu odeszła mi ochota wzięcia się w końcu za ten C++...
komentarz 13 sierpnia 2017 przez adrian17 Ekspert (320,820 p.)
Wiń COM/MFC, nie C++a.

wojtekd09, jest ryzyko że nikt Ci tego nie zdebuguje...czemu nie używasz rozsądniejszych technologii do okienek, jak C# + WinForms?
komentarz 13 sierpnia 2017 przez wojtekd09 Początkujący (260 p.)
Można powiedzieć, że zastosowanie C++ i MFC zostało mi przydzielone odgórnie i nie mogę nic w tej kwestii zmienić.
komentarz 13 sierpnia 2017 przez adrian17 Ekspert (320,820 p.)
Współczuję :/

Jedyna rada ode mnie: debuguj krok po kroku i spróbuj zbadać stan zmiennych tuż przez segfaultem.

1 odpowiedź

0 głosów
odpowiedź 13 sierpnia 2017 przez j23 Mędrzec (175,160 p.)

Co może być tego przyczyną?

Na przykład to, że wskaźnik pokaz nie ma przypisanego adresu. Z kodu, który podałeś, niewiele można wywnioskować.

Podobne pytania

0 głosów
1 odpowiedź 64 wizyt
0 głosów
1 odpowiedź 110 wizyt

88,381 zapytań

136,985 odpowiedzi

305,727 komentarzy

58,643 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...