C++ 简单开关中的分段故障11 intmain(){ MyBase*mb; 智力选择; 选择; 开关(选择){ 案例1: mb=新的Test1(); 打破 案例2: mb=新的Test2(); 打破 案例3: mb=新的Test3(); 打破 案例4: mb=新的Test4(); 打破 案例5: mb=新的Test5(); 打破 案例6:{ 链接测试t; t、 start(); 打破 } 违约: 返回0; } 如果(mb!=0){ mb->start(); 删除mb; } 返回0; }

C++ 简单开关中的分段故障11 intmain(){ MyBase*mb; 智力选择; 选择; 开关(选择){ 案例1: mb=新的Test1(); 打破 案例2: mb=新的Test2(); 打破 案例3: mb=新的Test3(); 打破 案例4: mb=新的Test4(); 打破 案例5: mb=新的Test5(); 打破 案例6:{ 链接测试t; t、 start(); 打破 } 违约: 返回0; } 如果(mb!=0){ mb->start(); 删除mb; } 返回0; },c++,C++,如果选项为6,为什么在检查mb是否为空时会出现分段错误 我刚开始学C++,只是做了一些练习。 如何在不影响类链接测试的情况下修复此问题? 谢谢。您还没有初始化mb;C++并没有为你做到这一点;对于choice为6的情况,mb没有分配任何值,因此稍后当您将其与0进行比较时,它是未初始化的,并且可以保存任何随机值(该随机值可以是0,但在大多数情况下不会是;它将只包含内存中变量现在所在的部分中的任何值)。 试一试 您尚未初始化mb;C++并没有为你做到这一点;对于choice为6的情况,mb没有分配任

如果选项为6,为什么在检查mb是否为空时会出现分段错误

我刚开始学C++,只是做了一些练习。 如何在不影响类链接测试的情况下修复此问题?
谢谢。

您还没有初始化
mb
;C++并没有为你做到这一点;对于
choice
为6的情况,
mb
没有分配任何值,因此稍后当您将其与0进行比较时,它是未初始化的,并且可以保存任何随机值(该随机值可以是0,但在大多数情况下不会是;它将只包含内存中变量现在所在的部分中的任何值)。 试一试


您尚未初始化
mb
;C++并没有为你做到这一点;对于
choice
为6的情况,
mb
没有分配任何值,因此稍后当您将其与0进行比较时,它是未初始化的,并且可以保存任何随机值(该随机值可以是0,但在大多数情况下不会是;它将只包含内存中变量现在所在的部分中的任何值)。 试一试


您需要将mb初始化为
NULL
,否则在
选项
不在范围1..5的情况下,将无法定义
mb
。更改:

MyBase *mb = NULL;
致:


您需要将mb初始化为
NULL
,否则在
选项
不在范围1..5的情况下,将无法定义
mb
。更改:

MyBase *mb = NULL;
致:


当您在函数范围内声明变量时,它们通常被称为“堆栈变量”。这意味着它们驻留在堆栈内存中,该内存通常包含以前使用的大量“垃圾”。因此,在声明时不初始化“mb”变量时,初始值是未定义的(不管堆栈中该点上发生了什么),通常为非零。 因此,您应该在声明时初始化mb:

MyBase *mb = NULL;

另外,我注意到“开关”中的“case 6:”没有将mb设置为任何值…

当您在函数范围内声明变量时,它们通常被称为“堆栈变量”。这意味着它们驻留在堆栈内存中,该内存通常包含以前使用的大量“垃圾”。因此,在声明时不初始化“mb”变量时,初始值是未定义的(不管堆栈中该点上发生了什么),通常为非零。 因此,您应该在声明时初始化mb:

MyBase *mb = NULL;

另外,我注意到“开关”中的“case 6:”没有将mb设置为任何值…

初始化
mb
变量:
MyBase*mb=0。谢谢,我认为在C++中空赋值是自动的,初始化
mb
变量:
MyBase*mb=0MyBase* mb = 0;