[英]Segmentation fault 11 in simple SWITCH
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;
}
如果选择为6,为什么在检查mb是否为NULL时出现分段错误?
我是C ++的新手,只是做一些练习。 如何在不影响LinkTest类的情况下解决此问题? 谢谢。
您尚未初始化mb
; C ++不会为您做到这一点; 并且对于choice
为6的情况,不会为mb
分配任何值,因此稍后在将其与0进行比较时未对其进行初始化,并且可以保留任何随机值(该随机值可以为0,但在大多数情况下为0不会;它将只包含变量现在所在的内存部分中的任何值。 尝试
MyBase *mb = NULL;
在函数范围内声明变量时,它们通常称为“堆栈变量”。 这意味着它们驻留在堆栈内存中,该内存通常包含大量以前使用的“垃圾”。 因此,在声明时不初始化'mb'变量时,初始值是不确定的(无论碰巧位于堆栈中的那个位置),通常是非零的。 因此,应在声明时初始化mb:
MyBase* mb = 0;
顺便说一句,我注意到“ switch”内部的“ case 6:”没有将mb设置为任何值...
您需要将mb初始化为NULL
,否则在choice
不在1..5 mb
范围内的情况下将无法定义。 更改:
MyBase *mb;
至:
MyBase *mb = NULL;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.