gpt4 book ai didi

c++ - 从指针获取值

转载 作者:搜寻专家 更新时间:2023-10-31 00:22:53 25 4
gpt4 key购买 nike

我在从指针获取值时遇到问题。我在 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 = &num;
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;
}

运行这段代码的结果如下:

NUMBER 65.5 RESULT_READARRAY -1.2001
//INCORRECT IT SHOULD BE LIKE NUMBER
FLOAT REFERENCE: 65.5 //CORRECT

NUMBER 66.5 RESULT_READARRAY -1.2001
//INCORRECT IT SHOULD BE LIKE NUMBER
FLOAT REFERENCE: 66.5 //CORRECT

由于某些原因,当我获取名为 readArray 的函数返回的指针值时,它是不正确的。我在同一函数中传递一个浮点变量 (d) 作为引用,只是为了验证该值是否正确,如您所见,浮点引用与数字匹配。如果我将变量 num(read array) 声明为静态 float ,则第一个 RESULT_READARRAY 将是 65.5,这是正确的,但是,下一个值将是相同的,而不是 66.5。让我向您展示使用静态浮点变量运行代码的结果:

NUMBER 65.5 RESULT_READARRAY 65.5
//PERFECT FLOAT REFERENCE: 65.5
//¨PERFECT

NUMBER 65.5 //THIS IS INCORRECT, IT
SHOULD BE 66.5 RESULT_READARRAY 65.5
FLOAT REFERENCE: 65.5

你知道我怎样才能得到名为 readArray() 的函数返回的正确值吗?

最佳答案

您将返回一个指向堆栈变量(局部变量)的指针,一旦您离开该函数,它就不再有效。它叫做 dangling pointer .

一种解决方法是使用

float *num = new float(bit.getFloatFromArray(arregloTemp); 
// ...
return (void*)num;

这将强制在堆上分配 num,允许在函数退出后使用指针。

但对于上面的示例,更好的选择是让 readArray 返回一个 float 并返回 num 的值。在这里返回一个指针似乎没有任何收获。

关于c++ - 从指针获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2767105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com