矩阵类运算符重载、析构函数问题

2024-01-03

我试图编写一个能够找到逆矩阵、伴随矩阵等的矩阵类。任意阶的方阵。 构造函数初始化一个 n 阶单位矩阵(传递给它)。

class Matrix
{
int** elements;
int order;

public:
Matrix& operator=(const Matrix& second_inp)
{
    if(this->order!=second_inp.order)
        cout<<"The matrix cannot be assigned!!!\n"<<this->order<<"\n"<<second_inp.order;

    else
    {
        for(int i=0;i<this->order;i++)
            for(int j=0;j<this->order;j++)
                this->elements[i][j] = second_inp.elements[i][j];

    }

    return *this;
}

Matrix operator*(const Matrix& a)const
{
    Matrix c(a.order);

    for(int i=0;i<c.order;i++)                      
        for(int j=0;j<c.order;j++)
            c.elements[i][j]=0;

    if (this->order!=a.order)
    {
        cout<<"The 2 Matrices cannot be multiplied!!!\n";
        return Matrix();
    }

    else
    {
        for(int i=0;i<a.order;i++)
            for(int j=0;j<a.order;j++)
                for(int k=0;k<a.order;k++)
                    c.elements[i][j] += (this->elements[i][k])*(a.elements[k][j]);

        return c;
    }
}
};

~Matrix()
{
    for(int i=0;i<this->order;i++)
        delete[] *(elements+i);
    delete[] elements;
    elements=nullptr;
}

如果我要使用此类运行以下代码:

Matrix exp1(2),exp2(2),exp3(2);
exp1.get_matrix();
exp3=exp1*exp2;
exp3.show_matrix();

我收到运行时错误,在调试时我发现,在乘法(exp1*exp2)之后,如果 * 运算符的结果,= 运算符无法访问数据。

但是,如果我在 main() 末尾使用像这样的手动析构函数来释放所有分配的内存,则程序可以正常工作。

void destroctor()
{
  for(int i=0;i<order;i++)
    delete[] *(elements+i);
  delete[] elements;
}

我如何编辑析构函数或运算符重载来纠正此问题?

我使用的构造函数:

Matrix(int inp_order):order(inp_order)
{
    elements=new int*[order];

    for(int i=0;i<order;i++)
        *(elements+i)=new int[order];

    for(int i=0;i<order;i++)
        for(int j=0;j<order;j++)
        {
            if (i==j)
                *(*(elements+j)+i)=1;
            else
                *(*(elements+j)+i)=0;
        }
}

很难判断出了什么问题,因为您还没有发布构造函数。

In the exp3=exp1*exp2;发生了很多事情:

首先在operator*函数中构造一个新的矩阵c。然后return c;语句调用复制构造函数,然后调用析构函数。之后,operator= 被调用,然后再次调用临时矩阵的析构函数。

我认为发生的情况是您正在使用默认的复制构造函数,它不会进行深层复制。这样析构函数就被调用了return c删除矩阵之间仍然共享的数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

矩阵类运算符重载、析构函数问题 的相关文章

  • boost::asio + std::future - 关闭套接字后访问冲突

    我正在编写一个简单的 TCP 客户端来发送和接收单行文本 异步操作由 std future 处理 以便于超时阻塞查询 不幸的是 我的测试应用程序在破坏服务器对象时因访问冲突而崩溃 这是我的代码 TCP客户端 hpp ifndef TCPCL
  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • 无法使用 FluentEmail 发送电子邮件中的嵌入图像

    我在用着流利的电子邮件 https github com lukencode FluentEmail在 ASP NET core 2 0 类库中 它将发送电子邮件通知 下面是我到目前为止尝试过的示例代码 using FluentEmail
  • 使用毕加索强制重新下载图像

    我正在创建一个应用程序 它将从特定的 url 下载图像并将其显示在 ImageView 上 服务器会随着时间的推移更改此图像 但 url 保持不变 所以我想实现这样的逻辑 当应用程序旋转或重新打开时 从应用程序缓存加载图像 当用户点击下载按
  • 未捕获错误:断言失败:尝试使用已在使用的 id 注册视图:名称

    我随机开始收到此错误Uncaught Error Assertion Failed Attempted to register a view with an id already in use name在我的应用程序上使用 ember cl
  • 如何在多行文本框中不断滚动到文本末尾? [复制]

    这个问题在这里已经有答案了 我正在使用计时器用文本更新我的文本框 每次计时器滴答作响时 我都会被重定向到多行文本框中键入的文本的开头 这个怎么做 我想说 当您刷新时 您可以将选择光标移动到末尾 然后使用 ScrollToCaret 滚动文本
  • Redis中的数据目录在哪里?

    将一些数据写入 Redis 服务器后 我可以从客户端读取数据 但是 如何找到文件系统上的数据目录呢 最快的方法 使用redis cli redis cli config get dir 如果您配置了身份验证 则需要在使用中传递该身份验证 a
  • Parsley 2.x 和 Bootstrap 3 错误消息范围的错误放置

    我正在尝试将欧芹验证添加到 Bootstrap 3 btn group 中包含的一组单选按钮 问题是欧芹注入的错误包装器 在我的例子中设置为跨度 出现在两个选项之间 包含在标签内 而不是出现在 btn group div 之外 下面的示例对
  • 不安全的 JavaScript 尝试访问带有 URL 的框架:域、协议和端口必须匹配。

    我试图通过调用来设置应用程序的高度 FB init appId fbAppId status true cookie true xfbml true oauth true channelURL webUrl channel html FB
  • 如何配置 WCF 以支持故障契约,其中主机和客户端都在使用 net.pipe 的同一进程中?

    我正在尝试使用 net pipe 绑定为我的服务与客户端交互创建一个进程内单元测试 与良好的 WCF 服务一样 它在服务操作上使用FaultContractAttribute 来公开可能的错误 包装异常 到元数据 我想通过 XML 配置客户
  • time() 根据服务器返回不同的时间戳

    我现在搜索了好几个小时 似乎以前没有人遇到过这个问题 我运行一个脚本 将当前时间戳写入两台服务器上的数据库中 两者都有相同的操作系统 软件 和相同的时区 现在我发现 某些时间戳和当前时间 之间的差异是负数 是的 计算是正确的 time ol
  • WPF 的打印对话框和打印预览对话框

    是否有像 Google Chrome 或 Word 那样的 WPF 打印对话框与 WPF 中的打印预览对话框相结合 此时我使用 Windows 窗体中的打印预览对话框 我也尝试过使用它的 WPF 版本 但是WPF没有PrintPreview
  • 访问Android上的本机串口

    我想让 Android 应用程序 服务访问本机串行端口 UART RS 232 当我说本机时 我指的是真正的 UART 而不是 USB 转串行加密狗 我可以从终端 连接到 4 个本机串行端口之一 看到它们 它表明内核已经处理了低级的事情 l
  • 尝试添加引用时,为什么我会看到“无法发出程序集:引用的程序集...没有强名称”?

    我想在我的 WPF 项目中包含一个系统托盘图标 并找到了此资源 http www hardcodet net projects wpf notifyicon http www hardcodet net projects wpf notif
  • 在 Mac OS X 中的 apache 中为 CORS 启用 mod_headers

    我正在尝试设置我的网站以允许 CORS 进行跨域脚本编写 但这似乎需要mod header在我的 htaccess 文件中启用 我没有太多处理 apache 的经验 我尝试谷歌installing mod header in apache
  • 为什么使用 PHP Zend_Pdf 库在 PDF 上居中文本的代码不起作用?

    我正在尝试在服务器上动态创建 PDF 文档并使用 Zend Pdf 库将它们发送到客户端 PDF 上的所有文本都需要与页面居中对齐 页面为信纸大小 横向 使用我在不同网站上多次找到的函数时 我遇到了一个问题 中心对齐不正确 所有文本都显示在
  • 如何增加mfc中组合框控件的高度?

    我想增加组合框控件的高度 增加宽度正在发生 但是当我尝试增加组合框高度时 它并没有增加 我很清楚我想增加控件的垂直高度 通常组合框控件我创建如下 如上图所示 红色边框的控件是我想要增加高度的组合框控件 如果您可以看一下下面的 EDIT 控件
  • Python - 从纯文本邮件中提取正文

    我只想提取消息正文并返回它 我可以过滤字段并显示片段 但不能显示正文 def GetMimeMessage service user id msg id try message service users messages get user
  • 如何将 adbannerview 添加到 UISplitviewController

    我使用 UISplitViewController 制作了一个 ipad 应用程序 它可以在两个方向上运行 现在我想向该应用程序添加横幅 我该怎么做呢 在界面生成器中 我只能将肖像横幅添加到详细视图 这或多或少可以工作 但是当我转动 iPa
  • phpmyadmin 打开 MySQL 表列表非常慢

    我可以登录 phpmyadmin 并很快查看数据库 一旦我单击其中一个并尝试查看表格列表 速度非常慢 我有什么遗漏的吗 我从 Ubuntu 10 04 更新到 Ubuntu 12 04 之前没有出现过这种情况 打开 config inc p
  • mxGraph 可以将图表导出为 PDF 吗?

    我正在开发一个使用 mxGraph 的项目 其中需要我导出 PDF 格式的高分辨率输出以获取服务流程图 我尝试使用 Java Swing 客户端 JGraphX 重新创建图形并将其导出为 PDF 但结果与浏览器显示的结果并不接近 客户端上的
  • 矩阵类运算符重载、析构函数问题

    我试图编写一个能够找到逆矩阵 伴随矩阵等的矩阵类 任意阶的方阵 构造函数初始化一个 n 阶单位矩阵 传递给它 class Matrix int elements int order public Matrix operator const