【发布时间】:2018-02-02 13:50:22
【问题描述】:
这可能是一个菜鸟问题,但我什至不知道该用谷歌搜索什么。
我正在尝试实现一个 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 !?
}
我错过了什么?如何正确地将我的数据从函数中取出?
【问题讨论】:
-
不确定你是否省略了它,但请注意
getStat必须返回一个值,否则你有 UB。 -
如果在分配和重新分配给
stout之前不delete结构,也存在潜在的内存泄漏。 -
不要在堆上分配统计数据(不要新)!在堆栈上分配并将地址传递给 lstat。
-
另一个问题:你真的需要动态分配结构吗? 两次?
-
另请注意,在声明变量时使用
struct是C-ism,在C++ 中不需要。