为什么A和B导致分段错误。因为即使x尚未分配值,但从技术上讲它仍具有无用值吗?另外,为什么D不是分段错误?我的答案键说A和B是细分错误,但这似乎是错误的。 D应该是有分段错误的那个,因为它试图返回0。如果我错了,有人可以纠正我。

一种。

    int x;
    int* p = &x;
    cout << p << *p << endl;

B.
  int* p = new int;
  cout << p << *p <<endl;

C。
  int* p;
  cout << p << *p <<endl;

D.
  int* p = 0;
  cout << p << *p <<endl;

最佳答案



虽然两者都从*p读取未初始化的值,这是未定义的行为,但两者都不会在任何当前系统上产生分段错误。

C和D都具有未定义的行为,并且可能在具有某些编译器和某些优化选项的当前计算机上产生分段错误。不能保证存在分段错误,但很有可能在这里。



您必须颠倒了问题的含义(例如“其中哪些不会导致分段错误”),否则答案键是错误的。

关于c++ - 分段故障澄清,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59234567/

10-11 21:23