gpt4 book ai didi

c++ - 简单SWITCH中的段错误11

转载 作者:行者123 更新时间:2023-11-27 23:21:46 25 4
gpt4 key购买 nike

int main(){
MyBase *mb;
int choice;

cout << "Select: ";
cin >> choice;

switch (choice) {
case 1:
mb = new Test1();
break;
case 2:
mb = new Test2();
break;
case 3:
mb = new Test3();
break;
case 4:
mb = new Test4();
break;
case 5:
mb = new Test5();
break;
case 6:{
LinkTest t;
t.start();
break;
}
default:
return 0;
}

if(mb != 0){
mb->start();
delete mb;
}

return 0;
}

如果 choice 是 6,为什么在检查 mb 是否为 NULL 时出现段错误?

我是 C++ 的新手,只是在做一些练习。如何在不影响 LinkTest 类的情况下解决此问题?谢谢。

最佳答案

当您在函数范围内声明变量时,它们通常是所谓的“堆栈变量”。这意味着它们驻留在堆栈内存中,其中通常包含以前使用的大量“垃圾”。因此,当在声明时不初始化 'mb' 变量时,初始值是未定义的(无论发生在堆栈中那个位置的什么),通常是非零的。因此,您应该在声明时初始化 mb:

MyBase* mb = 0;

顺便说一句,我注意到 'switch' 中的 'case 6:' 没有将 mb 设置为任何东西......

关于c++ - 简单SWITCH中的段错误11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12383558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com