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; }
如果选项为6,为什么在检查mb是否为空时会出现分段错误 我刚开始学C++,只是做了一些练习。 如何在不影响类链接测试的情况下修复此问题?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没有分配任
谢谢。您还没有初始化
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=0谢谢C++ C++ java语言。代码,谢谢。我认为NULL赋值是C++中的自动完成,谢谢。我想它会自动分配为null,就像Java一样。谢谢,我想它会自动分配为空,就像java一样。谢谢,我想它会自动分配成空,就像java一样。很多变量都不会被初始化——从性能上来说,这是一件好事,但它也会引入比您看到的更微妙的错误。因此,经验法则是始终初始化所有变量!谢谢,我认为它会自动分配为空,就像java一样。C++中,很多变量都不会初始化——性能,这是一件好事,但是它也会比你所看到的更微妙地引入错误。因此,经验法则是始终初始化所有变量!谢谢,我想它会像Java一样自动分配null。谢谢,我想它会像Java一样自动分配null。
MyBase* mb = 0;