c++ - 函数用完时结构会归零吗?

标签 c++ struct scope

<分区>

这可能是一个菜鸟问题,但我什至不知道要用谷歌搜索什么。

我正在尝试实现一个融合文件系统,但在传递结构时遇到问题,这可能是因为我对 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 !?
}

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

最佳答案

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

这就是解决方案

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

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

因此,当在函数内将新地址分配给 stout 时,这对 something() 中指向结构的原始指针没有影响(因为 getStat() 中的 stout 只是 main() 中的 st 的拷贝。

因为我们在 您可以按照@SomeProgrammerDude 的建议使用引用。

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

关于c++ - 函数用完时结构会归零吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45865689/

相关文章:

c++ - 取代表开始/结束的数字对,并消除重叠

c - #define 在单个主文件中的范围

javascript - 在 while 循环内声明变量 javascript

c++ - 如何遍历类指针的 vector

c++ - 通过指针获取: good practice?装饰一个char*和char const*

c++ - gdb 7.0 警告 : Wrong size fpregset in core file

go - 将命名类型转换为未命名类型

c - 如何将文本文件中的值分配给 C 中的数组结构?

c# - 将 C# 结构编码到 DX11 cbuffers

javascript - JavaScript函数声明作用域是 block 还是函数?