[英]Getting segmentation fault with c++ pointers
因此,我試圖通過運行以下代碼來熟悉c ++指針。
#include <iostream>
using namespace std;
int main(void){
int* x;
cout << &x << endl;
return 0;
}
可以正常工作並打印x的指針值,但是
#include <iostream>
using namespace std;
int main(void){
int* x;
*x = 100;
cout << &x << endl;
return 0;
}
當我嘗試調整細分時會給我帶來細分錯誤。 為什么是這樣? 我看不到多余的行應該如何改變x的地址。
您沒有分配要分配的對象。
int* x;
x的值未指定,可以是任意值。 所以下一條語句
*x = 100;
是無效的。
你必須寫
x = new int;
*x = 100;
要么
x = new int( 100 );
甚至
x = new int { 100 };
前提是您的編譯器支持C ++ 2011中引入的new運算符的列表初始化。
您有未定義的行為 。
您的第一個示例很好,因為&x
(類型為int**
)是堆棧分配的指針的地址。 cout
中的<<
重載之一被定義為正確輸出。
在第二個示例中,您要取消引用沒有指向任何內容的指針。 那是不確定的行為 ; 因此崩潰。 如果你寫過
int y;
int* x;
x = &y;
*x = 100; /*this means that y is now 100*/
那么自從x
指向某個東西以來,一切都會很好。
並輸出x的指針值
不完全是。
std::cout << &x;
它輸出x
的地址(指針的地址); std::cout << x;
打印地址, x
指向; std::cout << *x;
打印x
指向的內容; int* x;
*x = 100;
在這里, x
只是一個指針,您需要為100
分配內存。 例如
int* x = new int;
*x = 100;
std::cout << *x;
要不就
int* x = new int( 100 );
std::cout << *x;
在不分配內存並使x
未初始化的情況下,通過*x = 100
您嘗試更改一些隨機內存,這將導致未定義的行為 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.