【发布时间】:2013-08-05 15:01:37
【问题描述】:
以下情况,我有一个包含指向整数变量的指针的结构,如下所示:
struct Structure[] = {
{ &Var[0], &Var[1] },
{ &Var[2], &Var[3] }
};
事情是:Var 在第一次填充此结构时未初始化。 (如:NULL)
不久之后(第一次传递)变量Var 将被初始化,并且引用将相应更新。
我认为这没有任何故障的原因,但我希望您能在这方面提供专业知识。 将无效内存(带有数组下标)的引用放入这样的数组中是否合法?还是我需要针对这种情况采取不同的方法?
在第一次初始化之前,我不会访问这些变量的内容。
非常感谢。
编辑:
为了以后读者的利益:Var是一个全局指针变量,一开始就被初始化为NULL。初始化通过使用new将其变成一个数组。
【问题讨论】:
-
我有理由确定答案是否定的,并且某些优化器会破坏您的代码。
-
“或者我需要一种不同的方法来应对这种情况?”嗯,也许,初始化变量?
-
Var是引用还是指针? -
什么是未初始化的,
Var或Var[0]?如果Var被初始化为指向“一个未初始化的内存区域”,那么你的代码就可以了。 -
如果
Var是一个未初始化的指针,那么这就是各个方向的UB。如果它是T类型的 array 且具有未初始化的 content 则这是定义的行为,只要您不 read 的内容存储在您的结构(或Var)中的地址,直到上述位置它们自己的存储已被初始化。如果没有更多关于Var类型的信息,那就是我能提供的最深的评论了。