当我运行以下代码时,我得到分段错误错误,我无法纠正我的错误。
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应该指向价值&#39; 2&#39;。但相反,它会出错。
答案 0 :(得分:2)
使用c++
增加指针的值而不是整数的值。它将指向一个未由您分配的新位置,它将引发分段错误错误。新位置可能由其他程序或系统使用.....
答案 1 :(得分:2)
你在test
中移动指针的是什么?您将其移到变量a
的内存后面并达到未定义的行为。
c
|
+---+---+
| 2 | |
+---+---+
|
++c
答案 2 :(得分:2)
const biggest = movers.reduce((max, mover) => max.MoveCount > mover.MoveCount ? max : mover);
void test(int *c)
{
c++;
*c = 10;
是未定义的行为,因为您正在写入不属于您的内存。
答案 3 :(得分:0)
在功能测试中,'c'的地址为'a',表示1000.现在你增加这个地址,说它变为1004,现在这个内存地址没有被你分配。
当您尝试访问未分配的内存时,会发生分段错误。
现在当你尝试打印* c时,它可能会打印10但它是未定义的行为,有时甚至会使PC崩溃。
为了获得更好的想法,只需考虑free()当你释放()内存然后访问一个你可能仍然得到值的变量但它是未定义的行为,任何事情都可能发生。