我有以下LLVM代码。奇怪的是,类型si
的{{1}}变量在if块之外用新指令分配后立即变为空(0),而我已在外部范围声明它。这是怎么回事?
StoreInst
我得到这样的输出,
Value *OldVal = NULL;
StoreInst* si = NULL;
if ( ... )
{
if ( ... )
{
....
if ( ... )
{
...
StoreInst* si = new StoreInst(...);
errs() << "si = " << si << "\n"; // Get some address here
}
errs() << "-->SI = " << si << "\n"; // Here I get NULL, why?
}
...
}
答案 0 :(得分:9)
StoreInst* si = new StoreInst(...);
- 您隐藏了此处的名字si
当范围结束}
时 - 您会看到另一个指针的值
以下是您所做的一个示例:
int val = 0; //first val
{
int val = 10; //other val (let's call it second)
cout << val; //second val
} // second val is destroyed here
cout << val; //first val
为简单起见,我在示例中使用了int
。实际上它可以是任何类型