我正在尝试
void*
的方法中获取int
当我直接执行此操作时,就像将&x传递给转换方法一样,它返回正确的值,但是通过方法调用,我得到了奇怪的数字。
这是代码...
void *GetVoidPointer(int a)
{
return &a;
}
int ReadValueFromVoidPointer(void *ptr)
{
int *i = static_cast<int*>(ptr);
return *i;
}
int main()
{
int x = 10;
//Through method call to get void* : This doesn't work
int i= ReadValueFromVoidPointer(GetVoidPointer(x));
printf("%d\n", i);
//Direct call : This works
int y= ReadValueFromVoidPointer(&x);
printf("%d\n", y);
return 0;
}
我对C ++很陌生,所以可能做的很愚蠢。请告知。
答案 0 :(得分:4)
编译代码时,出现以下错误:
test.cpp: In function ‘void* GetVoidPointer(int)’:
test.cpp:4:26: warning: address of local variable ‘a’ returned [-Wreturn-local-addr]
void *GetVoidPointer(int a)
这意味着您正在返回局部变量(a
)的地址,这是一个问题,因为该变量在函数调用结束时被删除。
因此,您必须将reference
传递给它(我将让您寻找有关它的详细说明...)。
因此,您只需更改以下内容的GetVoidPointer()
即可,一切正常:void *GetVoidPointer(int& a)
。
结果值为10
和10
。
我正在使用g++
版的编译8.3.0
,没有添加任何选项。
答案 1 :(得分:0)
在函数GetVoidPointer中,局部参数'a'是临时的。当GetVoidPointer返回时,“ a”将被系统破坏。因此,您将不会获得正确的值。您可以使用“ C ++参考”。