2014-06-21 22 views
-3

我是C++的新手。我不太明白爲什麼這個代碼不起作用。這段代碼與堆棧動態變量有什麼關係?謝謝你的幫助。C++:指向棧動態變量的指針

int twice(int x) 
{ 
    int *y; 
    *y = x * 2; 
    return *y; 
} 
+0

這個'* y = x * 2;'調用_Undefined Behavior_,你沒有初始化'y'指向一個有效的地址! –

+0

[這是Stack Overflow社區推薦的C++書籍清單](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – milleniumbug

回答

0
int *y; 
*y = x * 2; 

是不正確的,因爲y點nowwhere,沒有到分配的內存。這是未定義的行爲。在這行代碼之後,你的程序是完全不可預知的,你不能對其行爲做任何假設。

您需要分配內存首先使用newmalloc和分配X * 2,或通過一個地址至y分配到的,即:

​​

實施例:

int main() { 

    int x = 4; 
    int *y = new int(x * 2); 
    cout << x << "," << *y; 
    delete y; 

    return 0; 
} 

側注意:這對於返回指向分配給函數的內存的指針是危險的,因爲這可能不清楚誰和何時負責釋放分配的內存。在你的特定情況下,動態分配絕對沒有明顯的理由。

+0

或者根本不使用指針 – deviantfan