变量中的数据不一致

Inconsistent Data in variable

本文关键字:不一致 数据 变量      更新时间:2023-10-16
#include<iostream>
#include<conio.h>
using namespace std;

    struct node
{
    node *next;
    node *prev;
    node *fnext;
    node *fprev;
    int device_number;
    int inode_number;
    int ref_count;
    bool locked;
};
node* Create(int inum,int dnum)
{
    node A;
    A.next=A.prev=A.fnext=A.fprev=NULL;
    A.inode_number=inum;
    A.device_number=dnum;
    A.ref_count=0;
    A.locked=false;
    return &A;
}
class Sample
{
public:
    Sample()
    {
        node*A= Create(0,0);
            cout<<A->device_number<<A->inode_number;
        Pass(A);
    }
    void Pass(node* A)
    {
        cout<<A->device_number<<A->inode_number;
    }

};
int main()
{
    Sample S;

    getch();
    return 0;
}

这只是一个大计划的一小部分。这里的重点是我在函数中获取垃圾值,例如 -868456546 传递节点* A 属性值,而在构造函数中使用全局函数 Create(int,int( 初始化节点 *A 后,我得到了正确的值,即 00。所以这不应该发生,因为我将同一个指针传递给函数 Pass。这里有什么问题?

您返回的是局部变量的地址,这是未定义的行为:

node* Create(int inum,int dnum)
{
    node A;
    //...
    return &A;  // no good
}

当函数返回时,该地址不再指向node的有效实例,因为A是一个局部变量。

您应该动态分配一个新节点,但随后您必须管理程序以确保没有内存泄漏:

node* Create(int inum,int dnum)
{
    node* A = new node;
    //...
    return A;   
}

此外,您的所有.都将变得->,因为A现在是一个指针。