运行时检查失败-变量未初始化就被使用

Run-time check failure - variable being used without being initialized

本文关键字:初始化 检查 失败 变量 运行时      更新时间:2023-10-16

下面的代码产生了这样的错误:

运行时检查失败#3 -变量'IBlockObject'正在使用而未初始化

我真的被这个卡住了。我知道有一个初始化问题,但我不知道如何解决它。下面是代码:

typedef struct{ //ISTATUS Structure
    long statusBit;
}ISTATUS;
typedef struct{ // INODE Structure
    char fileName[20];
    long INodeNumber;
    long BlockAddress;
    long NextINodeAddress;
}INODE;
typedef struct{ //IBLOCK Structure
    long BlockNumber;
}IBLOCK;
ISTATUS IStatusObject;
INODE INodeObject;
IBLOCK IBlockObject;

InitializeStructures(IStatusObject, INodeObject, IBlockObject);

我假设您指的是c++,我假设InitializeStructures的签名是:

void InitializeStructres(ISTATUS a, INODE b, IBLOCK c)
问题是您通过传递对象。InitializeStructures将获得您传入的这些对象的副本,并且InitializeStructures所做的任何事情都不会反映在您传入的对象上。

这将导致错误,因为复制操作。你试图复制一个对象("使用"该对象),而没有初始化它。

我假设你想让函数签名如下:

void InitializeStructres(ISTATUS& a, INODE& b, IBLOCK& c)

使InitializeStructures 复制对象;相反,它将直接操作通过引用传入的对象。

快速注意:你的类型/变量命名真的不标准。像IStatusObject这样的名称通常是接口(例如IUnknown)。而全大写的名字通常是遗留的或C符号。