[英]Segmentation fault while dereferencing the pointer in the calling function
运行以下代码时,出现分段错误错误,并且无法纠正错误。
void test(int *c)
{
c++;
*c = 10;
cout<<*c<<endl;
}
int main()
{
int a =2;
int *b = &a;
test(b);
cout<<*b;
return 0;
}
我认为b应该指向值“ 2”。 但是相反,它给出了一个错误。
使用c++
您将增加指针的值而不是整数的值。 它将指向您未分配的新位置,这将引发分段错误错误。 新的位置可能被其他程序或系统使用.....
为了在test
移动指针? 您将其移到变量a
的内存后面并达到未定义的行为。
c
|
+---+---+
| 2 | |
+---+---+
|
++c
void test(int *c)
{
c++;
*c = 10;
*c = 10
是未定义的行为,因为您正在写入不属于您的内存。
在功能测试中,“ c”的地址为“ a”,例如1000。现在您将该地址递增至1004,现在该内存地址不是由您分配的。
当您尝试访问未分配给您的内存时,会发生分段错误。
现在,当您尝试打印* c时,它可能会打印10,但这是未定义的行为,有时甚至会导致PC崩溃。
为了获得更好的主意,只要在释放内存()并访问变量时考虑一下空闲(),您可能仍然会得到该值,但这是未定义的行为,任何事情都可能发生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.