变量中的数据不一致
Inconsistent Data in variable
#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
现在是一个指针。
相关文章:
- 大于65535的C++数组[size]引发不一致的溢出
- 在 C++(和 C)中进行类型转换时明显不一致
- 填充上编译器生成的复制构造函数之间的不一致
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- CreateDIBSection为同一图像返回不一致的位图位值
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- 在 Qml 中从 QSqlTableModel 中删除单行时视图不一致
- 模板参数推导不一致
- 声明中不一致的no是否违反ODR?
- 如何删除分支因子不一致的树,最大为 30,40
- C++创建空 HDF5 文件而不是数据集的代码
- 元数据操作失败LNK2022错误 (8013118D):重复类型中的布局信息不一致 (选择设备参数):(0x020002
- 在服务器关闭的TCP连接上发送数据时的行为不一致
- 矢量存储不一致的数据
- 在两个线程之间传递数据时,时间不一致
- 如何迫使Avcodec使用不一致的框架数据平面
- 变量中的数据不一致
- 为什么填充数据成员时不一致
- 在C++DLL和C#GUI之间传递数据时出现不一致的结果