(VS报错)已在 xxxxx.exe 中执行断点指令(__debugbreak()语句或类似调用)-解决方法&&C++创建对象四种方式

2023-09-20 21:11:47

 上述报错困扰了我好几天,在网上搜了一天,到最后还是没有解决问题

试过通过项目属性->C/C+±>代码生成->启用增强指令集->选择AVX,这种方法也没用

但问题出现在创建对象时内存分配问题上

方法一:

 如果是这样创建对象,并且写了析构函数会报错,把析构函数删去之后程序就能正常运行了。

方法二:

创建对象的方式改为这样,程序也可以正常运行了

 

复习一下创建对象的四种方式

给定类的定义如下

class Test{
    private:
        int a;
    public:
        Test();
        ~Test();
}

 方式一:栈中分配内存,隐式调用构造函数;

Test A;

方式二:栈中分配内存,显式调用构造函数;

Test test = Test();

方式三:堆内存中分内存,使用new关键字显式调用构造函数;

Test *test = new Test;
delete Test;

方式四:其他

  • 很不常用的情况:利用对象指针;但在栈中分配内存(本质和前面两种一样,不过多了一个对象指针来操作而已)
// 很不常用的情况:利用对象指针;但在栈中分配内存
(本质和前面两种一样,不过多了一个对象指针来操作而已)
Test test1;
Test *test2 = &test1;

注意点:

注意1【普通对象(方式1/2)与对象指针(方式3/4)区别】
  • 方式1/2/4:使用完后不需要手动释放,该类析构函数会自动执行
  • 方式3:new申请的对象,则只有调用到delete时再会执行析构函数,如果程序退出而没有执行delete则会造成内存泄漏。【new和delete必须配合使用
注意2【普通对象(方式1/2)与对象指针(方式3/4)访问类中成员的区别】:
  • 创建对象以后,可以使用点号.来访问成员变量和成员函数,这和通过结构体变量来访问它的成员类似
  • 有了对象指针后,可以通过箭头->来访问对象的成员变量和成员函数,这和通过结构体指针来访问它的成员类似
注意3【关于方式3和方式4的说明】:
  • 在栈上创建出来的对象都有一个名字,比如 test1,test2,使用指针指向它不是必须的。
  • 但是通过 new 创建出来的对象就不一样了,它在堆上分配内存,没有名字,只能得到一个指向它的指针,所以必须使用一个指针变量来接收这个指针,否则以后再也无法找到这个对象了,更没有办法使用它。
  • 也就是说,使用 new 在堆上创建出来的对象是匿名的,没法直接使用,必须要用一个指针指向它,再借助指针来访问它的成员变量或成员函数。
注意4【只定义类指针

这跟不用new申明对象有很大区别,类指针可以先行定义,但类指针只是个通用指针,在new之前并为该类对象分配任何内存空间。比如:

Test* ptest = NULL;

  • 但使用普通方式创建的类对象,在创建之初就已经分配了内存空间。而类指针,如果未经过对象初始化,则不需要delete释放。

参考文章链接:https://blog.csdn.net/weixin_52028906/article/details/124513418

更多推荐

日志审计设计-结合spring-aop实现

日志审计设计设计原则和思路:元注解方式结合AOP,灵活记录操作日志能够记录详细错误日志为运营以及审计提供支持日志记录尽可能减少性能影响操作描述参数支持动态获取,其他参数自动记录。1.定义日志记录元注解,根据业务情况,要求description支持动态入参。例:新增应用{applicationName},其中applic

Linux 文件 & 目录管理

Linux文件基本属性Linux系统是一种典型的多用户系统,为了保护系统的安全性,不同的用户拥有不同的地位和权限。Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。可以使用命令:ll或ls–l来显示一个文件的属性以及文件所属的用户和组,如图所示:详细解析命令:ls-l中显示的内容使用命令:ll

自定义开发成绩查询小程序

在当今数字化时代,教育行业借助技术手段提高教学效果。作为老师,拥有一个自己的成绩查询系统可以帮助你更好地管理学生成绩,并提供更及时的反馈。本文将为你详细介绍如何从零开始搭建一个成绩查询系统,让你的教学工作更加高效和便捷。不过比较便捷好用的方法还是直接使用现成工具。今天我为大家争取到了易查分的福利,只需要在注册时输入邀请

解密Docker容器网络

一个Linux容器能看见的“网络栈”,被隔离在它自己的NetworkNamespace中。1“网络栈”的内容网卡(NetworkInterface)回环设备(LoopbackDevice)路由表(RoutingTable)iptables规则对于一个进程,这些构成它发起、响应网络请求的基本环境。作为一个容器,它可声明直

网络安全(黑客)自学

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也有Web

Javascript原型和原型链的详解

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录原型(Prototype)构造函数和原型对象原型链原型继承1.对象字面量和Object.create():可以使用字面量对象定义属性和方法,并使用Object.create()方法创建一个新对象,并将其原型设置

python特殊函数之__call__函数的作用

作用将一个类实例也可以变成一个可调用对象。详解__call__是Python中一个魔术方法(magicmethod),它用于定义对象的函数调用行为。换句话说,当你尝试调用一个具有__call__方法的对象时,Python会自动调用该方法。下面是一个简单的例子来说明__call__的作用:classMyClass:def

100天精通Python(可视化篇)——第100天:Pyecharts绘制多种炫酷漏斗图参数说明+代码实战

文章目录专栏导读一、漏斗图介绍1.说明2.应用场景二、漏斗图类说明1.导包2.add函数三、漏斗图实战1.基础漏斗图2.标签内漏斗图3.百分比漏斗图4.向上排序漏斗图5.标准漏斗图书籍推荐专栏导读🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,

【2023,学点儿新Java-34】基本数据类型变量 运算规则:自动类型提升、强制类型转换 | 为什么标识符的声明规则里要求不能数字开头?(通俗地讲解——让你豁然开朗!)

前情提要:【2023,学点儿新Java-33】字符型变量char|布尔类型变量boolean:true、false【2023,学点儿新Java-32】Java基础小练习:根据圆周率与半径求圆的面积|温度转换|计算矩形面积|判断奇偶数|年龄分类【2023,学点儿新Java-31】测试:整型和浮点型变量的使用|附:计算机存

【Python】PySpark 数据计算 ③ ( RDD#reduceByKey 函数概念 | RDD#reduceByKey 方法工作流程 | RDD#reduceByKey 语法 | 代码示例 )

文章目录一、RDD#reduceByKey方法1、RDD#reduceByKey方法概念2、RDD#reduceByKey方法工作流程3、RDD#reduceByKey函数语法二、代码示例-RDD#reduceByKey方法1、代码示例2、执行结果三、代码示例-使用RDD#reduceByKey统计文件内容1、需求分析

【生物信息学】奇异值分解(SVD)

目录一、奇异值分解(SVD)二、Python实现1.调包np.linalg.svd()2.自定义三、SVD实现链路预测一、奇异值分解(SVD)SVD分解核心思想是通过降低矩阵的秩来提取出最重要的信息,实现数据的降维和去噪。ChatGPT:SVD(奇异值分解)是一种常用的矩阵分解方法,它可以将一个矩阵分解为三个矩阵的乘积

热文推荐