-3
我是C++的新手。我不太明白爲什麼這個代碼不起作用。這段代碼與堆棧動態變量有什麼關係?謝謝你的幫助。C++:指向棧動態變量的指針
int twice(int x)
{
int *y;
*y = x * 2;
return *y;
}
我是C++的新手。我不太明白爲什麼這個代碼不起作用。這段代碼與堆棧動態變量有什麼關係?謝謝你的幫助。C++:指向棧動態變量的指針
int twice(int x)
{
int *y;
*y = x * 2;
return *y;
}
int *y;
*y = x * 2;
是不正確的,因爲y
點nowwhere,沒有到分配的內存。這是未定義的行爲。在這行代碼之後,你的程序是完全不可預知的,你不能對其行爲做任何假設。
您需要分配內存首先使用new
或malloc
和分配X * 2,或通過一個地址至y分配到的,即:
實施例:
int main() {
int x = 4;
int *y = new int(x * 2);
cout << x << "," << *y;
delete y;
return 0;
}
側注意:這對於返回指向分配給函數的內存的指針是危險的,因爲這可能不清楚誰和何時負責釋放分配的內存。在你的特定情況下,動態分配絕對沒有明顯的理由。
或者根本不使用指針 – deviantfan
這個'* y = x * 2;'調用_Undefined Behavior_,你沒有初始化'y'指向一個有效的地址! –
[這是Stack Overflow社區推薦的C++書籍清單](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – milleniumbug