2013-05-19 69 views
-5

我猜它領先無處,NULL指針什麼的,但是我檢查只是事先C++墜毀在得到指針

這兩個片段崩潰:

//Snippet 1 
DWORD *address = (DWORD*)(base + 0x54); 

if (address) 
    address = (DWORD*)(*address + 0xC); 

if (address) 
    address = (DWORD*)(*address + 0x8); //crashes here 


//Snippet 2 
DWORD address = *(DWORD*)(base + 0x54); 

if (address) 
    address = *(DWORD*)(address + 0xC); 

if (address) 
    address = *(DWORD*)(address + 0x8); //crashes here 

我做有問題? 在此先感謝

+0

這是不可能告訴。你寫的所有內容都可能是未定義的行爲。如果不知道「base」的初始值是什麼,就不知道。 –

+2

我在很多年前制定了一條經驗法則:如果我有指向指針的指針,現在是時候重新思考我在做什麼。這段代碼還有另外一層,所以它更加難以理解。 –

+0

我遍歷一系列的地址,每調用一次這個方法,base就是當前的地址。多級指針有什麼問題? – user2361925

回答

1

訪問衝突!

您正在觸摸可能被禁止進入您的程序的某些內存部分。解引用指向未知位置的指針是未定義的行爲。