Seite 1 von 1

c++ Pointer Frage

Verfasst: 26. Okt 2014 17:01
von Sascha-Thorsten
Angenommen ich hätte folgendes Stück Code:

float* foo( float a)(

static float arr[3] = {1.0f, 3.12f, a}
//do domething with arr
return arr;
}

void bar(){
float b = 42.0f
float* f = foo(b);

//do something with f
f = foo(b/2);
// do something with f

return;
}

Hier ist nun meine Frage: muss ich bevor ich f neu zuweise das alte f mit delete f löschen?

Re: c++ Pointer Frage

Verfasst: 26. Okt 2014 17:20
von RobDangerous
Nein, delete nur ganz genau dann, wenn zuvor auch new aufgerufen wurde. f zeigt hier immer auf die selbe Adresse, an der ein statisch alloziertes Stückchen Speicher liegt, das man gar nicht löschen kann.
Was aber hier schief gehen wird: Eine static deklarierte, lokale Variable wird nur einmal initialisiert. In arr wird also immer nur das a aus dem ersten Aufruf liegen. Einmal arr[2] = a; hilft hier aus. Als Aufrufer von foo muss man dann auch darauf achten, dass immer auf dem selben Array gearbeitet wird.

Re: c++ Pointer Frage

Verfasst: 26. Okt 2014 17:25
von simon.r
Der Code lässt sich zumindest unter gcc so noch nicht einmal compilen, weil das statische Array nur mit konstanten Werten initialisiert werden darf ("error: initializer element is not constant").

Re: c++ Pointer Frage

Verfasst: 26. Okt 2014 17:59
von Sascha-Thorsten
Mittlerweile hab ich etwas anderes gemacht, aber das will auch nicht funktionieren. Ich glaub ich sollte mal ne Pause machen