今天又接到了一个离谱的DEBUG订单

一、BUG程序

#include <iostream>
#include <string>class Rectangle {
private:int width;int height;public:Rectangle(int w, int h) {width = w;height = h;}void setWidth(int w) {width = w;}void setHeight(int h) {height = h;}int getArea() {return width * height;}int getPerimeter() {return 2 * (width + height);}void printInfo() {std::cout << "Rectangle: Width = " << width << ", Height = " << height << std::endl;}
};int main() {bool running = true;int option;Rectangle* rectangle = nullptr;while (running) {std::cout << "1. Create a rectangle" << std::endl;std::cout << "2. Set width" << std::endl;std::cout << "3. Set height" << std::endl;std::cout << "4. Calculate area" << std::endl;std::cout << "5. Calculate perimeter" << std::endl;std::cout << "6. Print rectangle info" << std::endl;std::cout << "7. Exit" << std::endl;std::cout << "Enter option: ";std::cin >> option;switch (option) {case 1: {int w, h;std::cout << "Enter width: ";std::cin >> w;std::cout << "Enter height: ";std::cin >> h;rectangle = new Rectangle(w, h);break;}case 2: {int newWidth;std::cout << "Enter new width: ";std::cin >> newWidth;rectangle->setWidth(newWidth);break;}case 3: {int newHeight;std::cout << "Enter new height: ";std::cin >> newHeight;rectangle->setHeight(newHeight);break;}case 4: {int area = rectangle->getArea();std::cout << "Area: " << area << std::endl;break;}case 5: {int perimeter = rectangle->getPerimeter();std::cout << "Perimeter: " << perimeter << std::endl;break;}case 6: {rectangle->printInfo();break;}case 7: {running = false;break;}default: {std::cout << "Invalid option!" << std::endl;break;}}delete rectangle;}return 0;
}

二、分析

1. 内存泄漏:在用户选择创建矩形时,程序会动态分配矩形对象的内存,但在程序结束时没有正确释放内存,导致内存泄漏。
2. 空指针解引用:在用户选择设置宽度或高度时,没有检查是否存在矩形对象的实例,而是直接使用了一个可能为空的指针对象。
3. 逻辑错误:在用户选择设置宽度或高度时,程序应该先检查是否存在矩形对象的实例,再进行相关操作。
4. 默认情况处理:在用户输入无效选项时,程序没有提供相应的处理机制,导致出现未定义的行为。
5. 缺少复制构造函数和赋值运算符重载:矩形类没有实现自定义的复制构造函数和赋值运算符重载,可能导致不正确的对象复制和内存管理问题。

说是还要改成中文…………呵呵

三、修改

#include <iostream>class Rectangle {
private:int width;int height;public:Rectangle() {width = 0;height = 0;}Rectangle(int w, int h) {width = w;height = h;}Rectangle(const Rectangle& other) {width = other.width;height = other.height;}~Rectangle() {// 进行必要的资源清理}Rectangle& operator=(const Rectangle& other) {if (this != &other) {width = other.width;height = other.height;}return *this;}void setWidth(int w) {width = w;}void setHeight(int h) {height = h;}int getWidth() const {return width;}int getHeight() const {return height;}int calculateArea() const {return width * height;}int calculatePerimeter() const {return 2 * (width + height);}
};int main() {Rectangle* rect = nullptr;int choice, width, height;while (true) {std::cout << "1. 创建矩形\n";std::cout << "2. 设置宽度\n";std::cout << "3. 设置高度\n";std::cout << "4. 计算面积\n";std::cout << "5. 计算周长\n";std::cout << "6. 退出\n";std::cout << "请输入选项: ";std::cin >> choice;if (choice == 1) {if (rect != nullptr) {delete rect;}std::cout << "请输入矩形的宽度: ";std::cin >> width;std::cout << "请输入矩形的高度: ";std::cin >> height;rect = new Rectangle(width, height);} else if (choice == 2) {if (rect != nullptr) {std::cout << "请输入新的宽度: ";std::cin >> width;rect->setWidth(width);} else {std::cout << "还没有创建矩形!\n";}} else if (choice == 3) {if (rect != nullptr) {std::cout << "请输入新的高度: ";std::cin >> height;rect->setHeight(height);} else {std::cout << "还没有创建矩形!\n";}} else if (choice == 4) {if (rect != nullptr) {std::cout << "矩形的面积为: " << rect->calculateArea() << "\n";} else {std::cout << "还没有创建矩形!\n";}} else if (choice == 5) {if (rect != nullptr) {std::cout << "矩形的周长为: " << rect->calculatePerimeter() << "\n";} else {std::cout << "还没有创建矩形!\n";}} else if (choice == 6) {if (rect != nullptr) {delete rect;}break;} else {std::cout << "无效的选项,请重新输入。\n";}}return 0;
}

四、结局

啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/449365.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据应用开发3-Scala笔记1

一、编程框架 Scala语言是在JVM上运行的&#xff0c;兼容Java语法 区分大小写 - Scala是大小写敏感的&#xff0c;这意味着标识Hello 和 hello在Scala中会有不同的含义。 类名 - 对于所有的类名的第一个字母要大写。 如果需要使用几个单词来构成一个类的名称&#xff0c;每个…

【课程作业_01】国科大2023模式识别与机器学习实践作业

国科大2023模式识别与机器学习实践作业 作业内容 从四类方法中选三类方法&#xff0c;从选定的每类方法中 &#xff0c;各选一种具体的方法&#xff0c;从给定的数据集中选一 个数据集&#xff08;MNIST&#xff0c;CIFAR-10&#xff0c;电信用户流失数据集 &#xff09;对这…

【Springcloud篇】学习笔记五(十章):Gateway网关

第十章_Gateway新一代网关 1.Gateway简介 1.1官网 上一代zuul 1.X&#xff1a;https://github.com/Netflix/zuul/wiki 当前gateway&#xff1a;https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 1.2是什么 SpringCloud …

MacOS安装JDK+Maven+Idea插件+nvm等

Java安装环境(MacOS)JDKMavenIdea插件nvm等 背景&#xff1a;新机安装开发环境发现需要找很多文章&#xff0c;&#xff0c;&#xff0c;&#xff0c;这里一篇文章安装所有环境 文章目录 Java安装环境(MacOS)JDKMavenIdea插件nvm等一、安装JDK①&#xff1a;下载②&#xff1a;…

【Qt5小项目】接金币小游戏

代码量在250行左右&#xff0c; 需要源码的可以私信我。

ubuntu20.04安装sumo

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 有问题&#xff0c;请大家指出&#xff0c;争取使方法更完善。这只是ubuntu安装sumo的一种方法。一、注意事项1、首先明确你的ubuntu的用户名是什么 二、sumo安装1.…

数据库笔记

文章目录 数据库概述基本概念存储过程完整性约束范式FAQ 分布式锁RedisMySQLZooKeeper 非关系型数据库Redis数据结构限流内存淘汰机制LRU 最近最少使用LFU 最近经常使用 过期策略 关系型数据库Generic SQL数据类型索引负面影响原则类型结构FAQ 事务隔离级别并发导致的问题ACID特…

Java常用

文章目录 基础基础数据类型内部类Java IOIO多路复用重要概念 Channel **通道**重要概念 Buffer **数据缓存区**重要概念 Selector **选择器** 关键字final 元注解常用接口异常处理ErrorException JVM与虚拟机JVM内存模型本地方法栈虚拟机栈 Stack堆 Heap方法区 Method Area (JD…

【python】英语单词文本处理

文章目录 前言一、环境实验所需的库终端指令 二、实现过程Version 1 起源Version 2 listVersion 3 arrayVersion 4 结构化数组Version 5 区分单元且打乱顺序Version 6 可视化 三、txt文件 前言 缘起自懒得考小孩儿单词&#xff0c;最终效果如图&#xff1a; 本文记录了英语单词…

Loadbalancer如何优雅分担服务负荷

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Loadbalancer如何优雅分担服务负荷 前言Loadbalancer基础&#xff1a;数字世界的分配大师1. 分发请求&#xff1a;2. 健康检查&#xff1a;3. 会话保持&#xff1a;4. 可伸缩性&#xff1a;5. 负载均衡…

京东物流基于 StarRocks 的数据分析平台建设

作者&#xff1a;京东物流 数据专家 刘敬斌 小编导读&#xff1a; 京东集团 2007 年开始自建物流&#xff0c;2017 年 4 月正式成立京东物流集团&#xff0c;截至目前&#xff0c;京东物流已经构建了一套全面的智能物流系统&#xff0c;实现服务自动化、运营数字化及决策智能化…

如何写好论文——(14)写作时如何定义和描述研究目标

当我们有了一个具体的细化的研究目标之后&#xff0c;我们需要把它清晰准备描述给我们的读者&#xff0c;并用它来指导我们的研究活动。 一、有方向 我们所选择的具体的研究目标一定要有明确的目标指向&#xff0c;那就是我们的长远目标。 二、有边界 我们要明确自己的研究…