[英]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.