Immer Wert von Zeiger
Ich habe problem immer den Wert von einem Zeiger. Ich habe den folgenden code in C++:
void* Nodo::readArray(VarHash& var, string varName, int posicion, float& d)
{
//some code before...
void* res;
float num = bit.getFloatFromArray(arregloTemp); //THIS FUNCTION RETURN A FLOAT AND IT'S OK
cout << "NUMBER " << num << endl;
d = num;
res = #
return res
}
int main()
{
float d = 0.0;
void* res = n.readArray(v, "c", 0, d); //THE VALUES OF THE ARRAY ARE: {65.5, 66.5};
float* car3 = (float*)res;
cout << "RESULT_READARRAY " << *car3 << endl;
cout << "FLOAT REFERENCE: " << d << endl;
}
Das Ergebnis der Ausführung dieses Codes sind die folgenden:
ANZAHL 65.5 RESULT_READARRAY -1.2001
//FALSCH, ES SOLLTE WIE ANZAHL
FLOAT-REFERENZ: 65.5 //RICHTIGENUMMER 66.5 RESULT_READARRAY -1.2001
//FALSCH, ES SOLLTE WIE ANZAHL
FLOAT-REFERENZ: 66.5 //RICHTIGE
Aus irgendeinem Grund, wenn ich den Wert des Pointers zurückgegeben von der Funktion, die aufgerufen wird readArray ist falsch. Ich bin vorbei an eine float-variable(d) als eine Referenz in der gleichen Funktion, nur um zu überprüfen, ob der Wert ok ist, und wie Sie sehen können, DIE FLOAT-REFERENZ entspricht der ANZAHL. Wenn ich deklarieren Sie die variable num(read-array) als static float, dem ersten RESULT_READARRAY werden 65.5, das ist richtig, jedoch wird der nächste Wert wird der gleiche sein, anstelle von 66,5. Lassen Sie mich Ihnen zeigen, das Ergebnis der Ausführung den code mit static float-variable:
ANZAHL 65.5 RESULT_READARRAY 65.5
//PERFEKTE FLOAT-REFERENZ: 65.5
//PERFEKTEANZAHL 65.5 //DIES IST FALSCH, ES
SOLLTE 66.5 RESULT_READARRAY 65.5
FLOAT-REFERENZ: 65.5
Wissen Sie, wie bekomme ich den richtigen Wert von der Funktion zurückgegeben wird genannt readArray()?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist der Rückgabe einen Zeiger auf ein stack-variable (lokale variable), die nicht mehr gültig, sobald Sie verlassen die Funktion. Es heißt dangling pointer.
Eine Abhilfe wäre die Verwendung von
dem würde Kraft
num
auf dem heap zugeordnet werden, so dass der Zeiger verwendet werden, nachdem die Funktion beendet wird.Aber die bessere option sein, für das obige Beispiel, wäre nur noch
readArray
Gegenzug einefloat
und wieder den Wert dernum
. Sie scheinen nicht zu nichts gewinnen durch die Rückgabe einen Zeiger hier.Den
num
variable deklariert wurde im inneren Bereich, auf den Stapel. Nachdem die Funktion zurückgekehrt ist, dass der Speicher Ort nicht mehr zur Verfügung, und obwohl Sie am ehesten in der Lage, darauf zuzugreifen, es (normalerweise) nicht, halten Sie den Wert, den Sie brauchen. In jedem Fall ist dies ein bug.Um dies zu beheben, können Sie entweder: