C ++返回的指针指向的不是从函数返回的内容

时间:2010-12-08 04:30:05

标签: c++ debugging pointers return-value

在我的程序中的以下代码中(当然简化),funcA和funcB中的输出是不同的,这意味着指针的值在整个过程中的某处发生了变化。我无法确认face的地址已更改,因为此错误在调试器(QT Creator的调试器)中不会弹出。但这是代码:

void funcA() {
    Face *face = funcB();

    if (face != NULL) {
        cout << "in funcA " << face->vertices[0] << endl;
    }
}

Face * funcB() {
    vector<Face> faces;
    //populate faces
    ...

    Face *face = &(faces[index]);
    cout << "in funcB " << face->vertices[0] << endl;
    return face;
}

虽然输出根据鼠标点击的位置而变化,但上面两个函数的输出变化很大(在funcB中它将是例如30,而在funcA中它将变为18117600 ......我只有60个面!)它似乎随机出现,而不是所有时间。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

您将返回指向返回后不再存在的本地值的指针。

答案 1 :(得分:5)

首先使用带有STL容器的 raw 指针可能很危险。

vector<Face> faces;funcB()的本地,因此在函数返回后,它会被销毁并留下dangling pointer(曾经指向有效当地价值)。 使用悬空指针调用Undefined Behaviour

答案 2 :(得分:3)

您返回的局部变量faces[index]的地址在funcB返回后无效。一旦faces终止,向量funcB中的对象就会被删除,并且您将返回已删除对象的地址。这将调用未定义的行为。