PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Hinweis: variable 'pHelp' set but not used [-Wunused-but-set-variable]



geWichtig
17.02.2017, 12:31
Tag
ich habe folgenden Code geschrieben:

int main ()
{
//zwei Zeiger
ptrCar* pCar;
ptrCar* pHelp;
pCar = new ptrCar();
pHelp = new ptrCar();
pCar->color();
pHelp = pCar;
pCar->end();

return 0;
}

und bekomme diesen Hinweis: "variable 'pHelp' set but not used [-Wunused-but-set-variable]".
Ich verstehe nicht warum ich diese Meldung erhalte. Denn der Zeiger wird doch genutzt , oder nicht? Er wird doch dereferenziert und wird auf pCar positioniert. Also warum diese Meldung?

danke

shedepe
17.02.2017, 14:55
Davon abgesehen, dass du gerade nicht mehr referenzierten Speicher erzeugt hast (Das ist böse), weil du zuerst mit pHelp = new ptrCar(); neuen Speicher allokierst und dann aber mit pHelp = pCar dem Pointer pHelp die Adresse von pCar zuweist macht die Meldung schon sinn. (Der Speicher der mit pHelp = new ptrCar() allokiert wurde kann jetzt nicht mehr erreicht werden)

Du hast nur zwei Zuweisungen auf die Variable, machts aber sonst nicht mehr. Der Kompiler ist an der Stelle so "intelligent" und merkt das. Würdest du jetzt pHelp->end() aufrufen würde die Meldung verschwinden.

Außerdem wird pHelp an keiner Stelle dereferenziert. Ihm wird wie gesagt nur pCar zugewiesen.
Der dereferenzierungsoperator wäre in dem Fall:

(*pHelp)
Beziehungsweise für Aufrufe auf den dereferenzierten Pointer:
pHelp->end();
das ist eine Kurzschreibweise für (*pHelp).end();

geWichtig
20.02.2017, 13:22
danke shedepe!
Das die Meldung ausgegeben wurde liegt also an der "Speicherleiche".

Ich habe da noch eine Frage zur Dereferenzierung. Was genau gilt als Dereferenzierung?
Soweit ich weiß, bedeutet das, dass auf ein Zeiger zugegriffen wird.

Ist damit nun der Zugriff auf die Speicheradresse des Zeigers gemeint oder der Wert der Variable, auf dem über den Zeiger zugegriffen wird?

Und unter dem Begriff "Zugriff" verstehe ich lesen und schreiben.

Wäre nett wenn mich jemand aufklärt
danke

shedepe
20.02.2017, 15:09
Dereferenzierung bedeutet: ich will auf den Wert hinter einer Speicheradresse zugreifen. Ob man da nur liest oder nicht egal. Im konkrete bei C++ meint das die Anwendung des Derefrenzierungsoperators * bzw ->

Und die Meldung liegt nicht an der Speicherleiche sondern, dass du mit dem Pointer pHelp nichts machst.