运行时检查失败 - 在未初始化的情况下使用变量

时间:2011-12-25 18:59:13

标签: c++ c

我的代码产生了这个错误:

  

运行时检查失败#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);

1 个答案:

答案 0 :(得分:2)

我假设你的意思是C ++,我假设InitializeStructures的签名是:

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

问题是您通过 value 传递对象。 InitializeStructures将获得您传入的这些对象的副本,InitializeStructures所做的任何内容都不会反映在您传入的对象上。

由于复制操作,这将导致错误。您正在尝试复制对象(“使用”对象)而未初始化它。

我假设您要按如下方式创建函数签名:

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

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

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