gpt4 book ai didi

C++ 从函数返回指针。值(value)丢失

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:48 24 4
gpt4 key购买 nike

我有以下内容:

void Class1::method()
{
QStringList* file_list;
collect_file_paths(file_list); //Sends pointer to the method below
}

void Class1::collect_file_paths(QStringList* file_list)
{
//Gather file paths
DirectorySearch ds;
connect(&ds, SIGNAL(updateStatus(QString)), this, SLOT(onStatusUpdate(QString)));
file_list = ds.get_file_names(_strPath); //Returns a pointer of QStringList
}

QStringList* DirectorySearch::get_file_names(QString path)
{
QStringList *file_names = new QStringList;
traverse(path, file_names);
compare_existing(file_names);
return file_names; //returning pointer address
}

发生的事情是,当我离开 Class1::collect_file_paths() 的范围时,从 get_file_names() 返回的内存地址丢失/删除了。据我了解,DirectorySearch 类中的 QStringList *file_names = new QStringList; 现在位于内存堆中。所以它应该留在堆上,直到我调用 delete 即它永远不会超出范围。但是,如上所述,当我从 collect_file_paths(file_list) 返回到 Class1::method() 时,QStingList 的地址/值丢失了>。

有人能解释一下发生了什么吗?

谢谢。

最佳答案

当你执行 file_list = ds.get_file_names(_strPath);//返回QStringList的指针
您正在更改 file_list(一个 32/64b 内存位置)的值,而不是内存位置所代表的数据的值。

您需要传递对指针的引用(或指向指针的指针)

void Class1::method()
{
QStringList* file_list;
collect_file_paths(&file_list); //Sends pointer to pointer to the method below
}

void Class1::collect_file_paths(QStringList** file_list)
{
//Gather file paths
DirectorySearch ds;
connect(&ds, SIGNAL(updateStatus(QString)), this, SLOT(onStatusUpdate(QString)));
*file_list = ds.get_file_names(_strPath); //set value of pointer in caller to value returned by below function
}
...

左右

关于C++ 从函数返回指针。值(value)丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6411582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com