我有以下代码片段:
vector<DEMData>* dems = new vector<DEMData>();
ConsumeXMLFile(dems);
if(!udp_open(2500))
{
}
我希望ConsumeXMLFile方法使用通过读取XML文件构建的DEMData对象来填充向量。当ConsumeXMLFile返回时,dems向量为空。我想我遇到了通过值传递的问题。
发布于 2010-02-11 23:26:19
您是否在任何时候重新分配传递到函数中的指针?换句话说,你的函数看起来像这样吗:
void ConsumeXMLFile(vector<DEMData>* dems)
{
// ... some code ...
dems = new vector<DEMData>();
// ...more code...
}
这是我看到的初学C++程序员(和C程序员)经常犯的错误。这里发生的事情是,指向dems向量的指针是通过值传递的,这意味着如果修改指向的向量,将影响调用者拥有的向量。但是,如果您修改指针(通过值传递),这将不会影响调用者拥有的指针。在重新赋值之后,ConsumeXMLFile中的dems指针将指向与调用者持有的dems指针完全不同的向量。
有一件事让我怀疑你可能会这么做,那就是这是C++,没有明确的理由让你传递一个指向向量的指针,而不是一个指向向量的引用。
发布于 2010-02-11 23:13:35
从外观上看,ConsumeXMLFile接受一个指向向量的指针,所以我怀疑这是一个通过值传递的问题。
https://stackoverflow.com/questions/2245330
复制相似问题