GetParent()->x() - Vermutlich Problem mit Speicherzugriff



  • Hi,

    ich habe eine CUGCtrl-Subclass (Ultimate Toolbox Grid) in meinem Fenster (CDockablePane) und ein eigenes Control was direkt von CWnd abgeleitet ist.

    Wenn der Benutzer im UGGrid einen Haken an einen Eintrag setzt (Hier über Tastatur) rufe ich eine funktion im Fenster auf welches reagiert, indem es ein neues Item in meine CWnd-Subclass einfügt.

    Hier ein par Details vorweg:
    - CItemView ist von CDockablePane abgeleitet
    - CParameterItem enthält nur ein par Informationen die dem Benutzer angezeigt werden
    - mSummary ist das von CWnd abgeleitete Control

    void CItemUGCtrl::OnCharDown(UINT *uKey, BOOL bProcessed)
    {
    	if (*uKey == VK_RETURN)
    	{
    		CUGCell	uCell;
    		long	lFindRow;
    		int		iFindCol;
    
    		if ((EnumFirstSelected(&iFindCol, &lFindRow) == UG_SUCCESS) && (GetCell(IC_COL_CHECK, lFindRow, &uCell) == UG_SUCCESS))
    		{
    			CParameterItem *pItem;
    
    			pItem = (CParameterItem*) uCell.GetParam();
    
    			if (pItem != NULL)
    			{
    				// Hier Parent ermitteln und auswerten:
    				((CItemView*) GetParent())->ParameterChanged(pItem);
    
    				bProcessed = TRUE;
    			}
    		}
    	}
    
    	CMyUGCtrl::OnCharDown(uKey, bProcessed);
    }
    
    BOOL CItemView::ParameterChanged(CParameterItem *pParameter)
    {
    	// Hier mache ich nichts weiter als ein neues Item (COb-Subclass) in ein CObArray einzufügen...
    	mSummary.AddItem(new CTextBoxItem());
    
    	return (TRUE);
    }
    

    Ander Stelle mSummary.AddItem(new CTextBoxItem()) bricht das Programm mit einer Zugriffsverlertzung an Position 0x1a03ab48 ab. Die Adresse scheint auf den ersten Blick ok zu sein, dort hatte ich aber auch schon 0xfdfdfdfd beim testen..

    Gruß


  • Mod

    0xfd deutet darauf hin, dass der Speciherblock freigegeben wurde.

    Bist Du sicher, dass der this Zeiger in diesem Moment in Ordnung ist und das Fenster nicht bereits zerstört ist, wenn diese Nachricht behandelt wird?



  • Ich bin wieder selbst Schuld gewesen....
    Das Parent ist nicht mein Fenster sondern der Splitter der da noch zwischen ist 😞

    Danke für den Schubser in Richtung this!


  • Mod

    Dafür sollte man immer GetParentFrame verwenden. Sofern es sich wirklich außerhalb, des Splitters wieder um ein Framewnd handelt.


Anmelden zum Antworten