2017-04-01 153 views
-1

我遇到的一個問題是試圖將變量轉換到內存中,以便稍後訪問。帶指針鑄造的局部變量

我這裏有一個例子代碼,完美的作品:

unsigned int *label = (unsigned int *)malloc(sizeof(unsigned int)); 
label = (unsigned int *) 0xFFAAFFAA; 

在別的地方在我的代碼可以訪問此值的標籤,這將指向0xFFAAFFAA作爲它的值,當我嘗試打印。

但是,如果我嘗試從一個變量賦值像這樣:

//all of this is inside a method.. so any variables declared would be local 
    unsigned int localVariable = 0xFFFFFFFF; 
     unsigned int *label = (unsigned int *)malloc(sizeof(unsigned int)); 
     label = &localVariable; 

其結果將是什麼發瘋似的:0x7f252d6b5f00 ..這,我只是假設是在內存的隨機地址。我知道這個問題是因爲一個局部變量,因爲它在一個函數內運行,而不是全局的。但我不明白這會是什麼語法......

我想定義局部變量的原因是因爲有該函數中的其他邏輯來添加和減去該變量..我離開了它保持最小限度

編輯:所以我可以做這樣的事情?

unsigned int localVariable = 0xFFFFFFFF; 
    unsigned int *label = (unsigned int *)malloc(sizeof(unsigned int)); 
    *label = localVariable; 
+2

你想在這裏做什麼? 'label =(unsigned int *)0xFFAAFFAA;'簡單地覆蓋指針本身。 –

+0

@OliverCharlesworth嗨奧利弗,織補。基本上所有我試圖做的是創建一個新的無符號..執行一些邏輯,如減去和添加,然後將其值分配給一個指針 –

+0

,因爲我似乎無法移位或做任何類型的這些操作一個無符號的int指針..所以我需要做一個正常的值,然後複製它 –

回答

0

聽起來你在這裏想要的是創建一個指向函數中的變量的指針,然後讓它在函數之外訪問。

第一個示例的問題是您分配內存並將其地址分配給label,但您覆蓋了值label,導致您丟失對剛分配的內存的引用。您需要解除引用指針使用*運算符來寫入您剛剛分配的內存地址。

第二個示例將不起作用,因爲您接受了局部變量的地址,然後該函數返回時該變量超出了作用域。所以地址變得無效。

下面的例子分配空間,解引用剛分配給指定地址的指針,然後地址返回給調用者。

unsigned int *func() 
{ 
    // allocate space (don't cast return value of malloc) 
    unsigned int *label = malloc(sizeof(unsigned int)); 
    // dereference pointer and write value to allocated memory 
    *label = 0xFFAAFFAA; 
    // pass pointer to allocated memory to the calling function 
    return label; 
} 

請記住,調用函數將負責調用時,它是用它來避免內存泄漏完成時返回的內存free