Avatar billede _jepsen_ Nybegynder
07. marts 2004 - 19:39 Der er 7 kommentarer

problem med pointere

Jeg er lige ved at blive sindsyg over et lille pointerproblem.

Jeg har en pointer til TColor (fra BCB 6), den er privat medlemsfunktion.
Når jeg giver den noget at referer til gennem en set-metode ser det umiddebart ud til at gå fint.
Men når jeg hiver den ud vha get-metode peger den på adressen FFFFFFFF hvilket selvfølgelig giver acces-violation. Klassen manipulerer ikke selv med den.

Så jeg spørger, kan 'et eller andet' pille ved pointeren selvom den er privat?
Avatar billede laffe Nybegynder
07. marts 2004 - 19:42 #1
Må vi se noget kode ?

Din Get og Set routine måske
Avatar billede _jepsen_ Nybegynder
08. marts 2004 - 00:18 #2
class Node
{
    public:
    Node(string Navn="", int Vardi=0, bool Tegn=false, int Foralder=-1)
    {
        this->Navn = Navn;
        this->Vardi = Vardi;
        this->Tegn = Tegn;
        this->Foralder = Foralder;
        Farve == NULL;
    }

    void Node::TilfojBarn(int BarnIndex)
    {
        Barn.Tilfoj(&BarnIndex);
    }

    int HarBorn()
    {
        int Index=0;
        if (Barn.GetAntalBrugte()>0)
        {
            Barn.First();
            Index = (*Barn.GetThis());
            if (Index > 0)
                return Index;
            else
                return false;
        }
        return 0;
    }
    void SetFarve(TColor* Farve)
    {
        this->Farve = Farve;
    }
    TColor * GetFarve()
    {
        return Farve;
    }


    string Navn;
    int Vardi;
    bool Tegn;
    int Foralder;
    double Procent;
    DynArray<int> Barn;
    private:
    TColor *Farve ;
};

Det er temmelig simpelt, det er det der irriterer mig...

Jeg har testet i debuggeren at der ikke kommer nogle sindsyge værdier ind, som f.eks FFFFFFFF, men når jeg bruger getmetoden kommer den ud og giver access violation
Avatar billede bertelbrander Novice
08. marts 2004 - 00:33 #3
I Node::Node(...) har du:

Farve == NULL;

Jeg tror du mener:

Farve = NULL;
Avatar billede bertelbrander Novice
08. marts 2004 - 00:36 #4
Ellers kan det være et problem at du sætter Farve til at pege på et objekt der bliver ugyldig, f.ex:

Node node;

void foo()
{
  TColor Color;
  node.SetFarve(&Color);
}

void bar()
{
  TColor *Color = new TColor(0);
  node.SetFarve(Color);
  delete Color;
}
Avatar billede _jepsen_ Nybegynder
08. marts 2004 - 00:55 #5
Aaah for fanden da også: Farve == NULL; hvorfor fanden så jeg ikke det, nu har jeg stirret mig blind på den fejl i 2 dage... Tak for hjælpen, ligger du ikke lige et svar?
Avatar billede bertelbrander Novice
08. marts 2004 - 00:58 #6
Gav kompileren ikke en warning? Hvis ikke skulle du måske se om ikke du kan få den til det.

Jeg forsøger at undgå point.
Avatar billede _jepsen_ Nybegynder
08. marts 2004 - 01:01 #7
nej, den siger intet, den plejer ellers at advare om den mindste detalje...

Hvorfor prøver du at undgå point?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester