我有以下代码段:
vector<DEMData>* dems = new vector<DEMData>();
ConsumeXMLFile(dems);
if(!udp_open(2500))
{
}
我希望ConsumeXMLFile方法使用通过读取XML文件构建的DEMData对象填充向量。当ConsumeXMLFile返回时,dems向量为空。我想我正在遇到价值问题。
答案 0 :(得分:3)
通过这看起来,ConsumeXMLFile采用了一个指向向量的指针,所以我怀疑这是一个值传递问题。
答案 1 :(得分:1)
您是否在任何时候重新分配传递给函数的指针?换句话说,你的功能看起来像这样:
void ConsumeXMLFile(vector<DEMData>* dems)
{
// ... some code ...
dems = new vector<DEMData>();
// ...more code...
}
这是一个常见的错误,我看到C ++程序员(和C程序员)的开始。这里发生的是指向dems向量的指针正在通过值传递,这意味着如果修改指向向量,则会影响调用者拥有的向量。但是,如果修改指针(由 value 传递),则不会影响调用者拥有的指针。在重新赋值之后,ConsumeXMLFile中的dems指针将指向与调用者持有的dems指针完全不同的向量。
让我怀疑你可能会这样做的一件事是,这是C ++,并且没有明确的理由为什么你想要传递一个指向矢量的指针,而不是传给对象的引用。