2016-03-06 97 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。 –