如何从函数返回void *?

时间:2019-08-23 00:42:11

标签: c++

我正在尝试

  • void*的方法中获取int
  • 将该指针传递给另一个方法,并获取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 ++很陌生,所以可能做的很愚蠢。请告知。

2 个答案:

答案 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)
结果值为1010
我正在使用g++版的编译8.3.0,没有添加任何选项。

答案 1 :(得分:0)

在函数GetVoidPointer中,局部参数'a'是临时的。当GetVoidPointer返回时,“ a”将被系统破坏。因此,您将不会获得正确的值。您可以使用“ C ++参考”。