当函数用完时,struct会变为零?

时间:2017-08-24 15:33:52

标签: c++ struct scope

这可能是一个noob问题,但我甚至不知道谷歌的用途。

我试图实现一个fuse文件系统并且在传递结构时遇到了麻烦,可能源于我对C ++缺乏经验。

static int getStat(std::string path, struct stat *stout)
{
    ...
    struct stat *st = new struct stat();
    lstat(path.c_str(), st);
    // lstat correctly filled st according to gdb
    ...
    stout = st;
    // values are correctly copied to stout according to gdb
}

void something()
{
    struct stat *st = new struct stat(); // this might also be stack allocated by fuse, idk
    getStat("/", st);
    // but st is all zero now !?
}

我错过了什么?如何正确地从函数中获取数据?

1 个答案:

答案 0 :(得分:3)

您必须传递一个双指针才能在调用函数中反映更改的指针。

所以这是解决方案

static int getStat(std::string path, struct stat **stout)
...
getStat("/", &st);

中,函数参数总是按值传递(引用除外)。这意味着在函数getStat()中,stout是指向函数调用中传递的struct的指针的副本。

因此,当新地址被分配给函数中的stout时,这对something()中{s}的结构的原始指针没有影响(stout以内getStat()只是stmain()的副本。

由于我们在,您可以使用@SomeProgrammerDude建议引用。

static int getStat(std::string path, struct stat& stout)
struct stat st;
getStat("/", st);