2014-04-24 49 views
0

我敢肯定,我失去了一些東西很明顯,但我想在Objective C.分配NSInteger的*

-(NSInteger*) getIntegerPointer{ 
    NSInteger refValue = 0; 
    NSInteger* theReturn = &refValue; 
    return theReturn; 
} 

創建NSInteger的指針的一個實例,當我調用此函數theReturn是零,但在調試器的函數內有效。

有什麼建議嗎?我不想將theReturn更改爲NSInteger。

+3

這是不合法的返回一個指向一個局部變量。 –

+9

你爲什麼要使用指針? 「NSInteger」不是一個班級。你沒有實例。這是一個簡單的原始類型。 – rmaddy

+0

維護一個全局變量。這段代碼似乎毫無意義。 – ZeMoon

回答

1

變量refValue是一個局部變量,這意味着它將在堆棧中,而-getIntegerPointer方法正在執行。只要該方法返回,變量就會消失(從堆棧中彈出),所以它的地址不再有意義。

如果要返回一個有效的指針,你必須分配的內存的東西被指出,像這樣:

-(NSInteger*) getIntegerPointer{ 
    NSInteger refValue = 0; 
    NSInteger* theReturn = malloc (sizeof(NSInteger)); 
    *theReturn = refValue; 
    return theReturn; 
} 
+1

,你會泄漏內存 –

+0

那麼這取決於調用者用什麼內存。據推測,它將被使用,然後在適當的時候釋放。但這超出了問題的範圍。 – user1118321

+0

謝謝你和你的正確,這超出了問題的範圍,但如果我這樣做,它會正確地釋放它: NSInteger * temp = [self getIntegerPointer]; //辦事 free(temp); – user1256378