2016-03-06 98 views
3

有没有办法检查指针是否已初始化?我有cointain指针检查指针是否已初始化的最佳方法

typedef struct foo 
{ 
    int* ptr1; 
    int* ptr2; 
    int* ptr2; 
    ... 
    int* ptr100; 
} 

,然后我的代码被以这些指针分配不会忽略(内循环)的阵列的结构。但在分配地址之前,我想检查指针是否已经包含地址。我知道我可以initliazie每个指针与NULL,然后用检查:

if(ptr1 == NULL) 
    do something 

但是,有没有办法写类似的东西,但没有的ptr初始化?

+0

你可以'memset'的'struct'权声明后。 – stackptr

+0

否。如果结构在堆栈或堆上分配,则内容将是随机的。如果它在BSS(全局变量)中,它将被初始化为零,但我假设它可能不会适用于你的情况。 – slugonamission

+0

这不是一个指针数组,它们是100个指针成员。 – StoryTeller

回答

7

未初始化的变量可以包含任何值。因此,不可能找出变量是否未初始化,因为它看起来就像已经初始化的变量。确保变量初始化的唯一方法是明确地向您写出一个值(例如,NULL),正如您在问题中已经注意到的那样。

+0

它甚至是未初始化变量的未定义行为测试,因此任何尝试“检查”它是否被初始化都会产生UB。 –