C++ C++;返回的指针指向函数返回的内容以外的内容

C++ C++;返回的指针指向函数返回的内容以外的内容,c++,debugging,pointers,return-value,C++,Debugging,Pointers,Return Value,在我的程序中的以下代码中(当然是简化的),funcA和funcB中的输出是不同的,这意味着指针的值在过程中的某个地方发生了更改。我无法确认face的地址已更改,因为调试器(QT创建者的调试器)中不会神奇地出现此错误。但代码如下: void funcA() { Face *face = funcB(); if (face != NULL) { cout << "in funcA " << face->vertices[0] <&

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

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;
}
void funcA(){
Face*Face=funcB();
如果(面!=NULL){

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

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

您将返回一个指向在u return。

返回的是指向本地值的指针,该值在返回后不再存在。

首先,在STL容器中使用原始指针可能会很危险

vector faces;
funcB()
的本地函数,因此在函数返回后,它将被销毁并留下一个(它曾经指向一个有效的本地值)。使用悬空指针调用。

首先,将原始指针与STL容器一起使用可能是危险的


vector faces;
funcB()
的本地函数,因此在函数返回后,它将被销毁并留下一个(它曾经指向一个有效的本地值)。使用悬空指针调用。

您对修复它的最佳方法有什么建议吗?“修复它的最佳方法”基本上取决于你在这些函数中所做的一切。你想完成什么?为什么函数中的“面”是局部的?为什么你认为返回指针是正确的做法?面应该是一个临时向量,用来跟踪地形中所有与光线相交的面,所以我可以稍后找到找出哪张脸离我的相机最近。我想将指针返回到我的地形中的脸列表中的脸,以便我可以在另一个函数中更改脸的颜色。你对修复它的最佳方法有什么建议吗?“修复它的最佳方法”基本上取决于你在这些函数中所做的一切。你想完成什么?为什么函数中的“面”是局部的?为什么你认为返回指针是正确的做法?面应该是一个临时向量,用来跟踪地形中所有与光线相交的面,所以我可以稍后找到找出哪张脸离我的相机最近。我想将指针返回到我的地形中的脸列表中的脸,这样我就可以在另一个功能中更改脸的颜色。