【问题标题】:C ++ exit code 3221225477C++ 退出代码 3221225477
【发布时间】:2022-01-06 05:23:10
【问题描述】:

我正在尝试在指针上运行一个简单的 C++ 程序,但我得到的输出是“[Finished in 5.55s with exit code 3221225477]”。我系统上的 Norton Data Protector 阻止了文件执行(我猜),但我不知道为什么?我停用了 Data Protector,但没有任何改变。请有人看一下我的代码并向我解释一下,这里发生了什么?谢谢你

    #include <iostream>
    using namespace std;


    int main()
    {   
        int x;
        int * ptr ;
        *ptr = x ; 
        cout<<ptr;
    
    }

【问题讨论】:

  • 3221225477 = 0xC0000005 = STATUS_ACCESS_VIOLATION*ptr = x 应该做什么?
  • 你使用的变量都没有被初始化。

标签: c++ pointers


【解决方案1】:

问题是变量 x 未初始化,而您使用的是未初始化变量的值,这会导致 未定义的行为。变量 @ 也是如此987654324@,它也未初始化并且取消引用它会导致未定义的行为。

*ptr = x ;//undefined behavior because first x is uninitialized and you're using x and second ptr is also unitialized and you're dereferencing ptr 

你应该这样做:

int x = 0;
int *ptr = &x;//now ptr is a pointer pointing to variable x

出于这个原因,建议:

始终在本地/块范围内初始化内置类型,否则它们具有垃圾值,使用/访问该垃圾值可能导致未定义行为

UB(未定义行为的缩写)表示任何事情都可能发生,包括但不限于访问冲突错误。查看What does access violation mean?

【讨论】:

  • UB 并没有真正解释访问冲突错误。
  • @Evg UB 表示任何事情都可能发生,包括但不限于访问冲突错误。查看What does access violation mean?
  • “但不限于”——是的,这就是为什么 UB 没有解释任何东西的原因。这里的解释来自虚拟内存的工作原理,而不是来自 UB。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
相关资源
最近更新 更多