(@▽@) 2021-04-19 20:59 采纳率: 50%
浏览 46
已采纳

初学C++,麻烦问哈这个问题如何解决?

我学C++没得好久还没学到函数,所以代码有点繁琐,在运行输入完数据后出现了这个问题,但是不晓得怎么解决。。

#include <iostream>
#include<iomanip>


int main() {
	size_t rows1{}, columns1{};
	std::cout << "How many rows and columns?" << std::endl;
	std::cin >> rows1 >> columns1;//输入第一个矩阵的行列数
	if (rows1 == 0 || columns1 == 0)//如果行列数为0,则不进行计算
		return 0;
	double** matrix1{ new double*[rows1] };//matrix1数组是double*指针的一个动态数组,每个double*指针包含一个double数组的地址
	for (size_t i = 0; i < rows1; ++i) {
		matrix1[i] = new double [columns1] {};//矩阵的行
	}
	for (size_t i{}; i < rows1; ++i) {
		for (size_t j{}; j < columns1; ++j) {
			std::cout << "Please enter the value of row " << i+1 << " and column " << j+1 << std::endl;
			std::cin >> matrix1[i][j];//输入矩阵第【i+1,j+1】的值
		}
	}
	size_t rows2{}, columns2{};
	std::cout << "How many rows and columns?" << std::endl;
	std::cin >> rows2 >> columns2;//输入第二个矩阵的行列数
	if (rows2 == 0 || columns2 == 0)//如果行列数为0,则不进行计算
		return 0;
	double** matrix2{ new double*[rows2] };//matrix2数组是double*指针的一个动态数组,每个double*指针包含一个double数组的地址
	for (size_t i = 0; i < rows2; ++i) {
		matrix2[i] = new double [columns2] {};//矩阵的行
	}
	for (size_t i{}; i < rows2; ++i) {
		for (size_t j{}; j < columns2; ++j) {
			std::cout << "Please enter the value of row " << i+1 << " and column " << j+1 << std::endl;
			std::cin >> matrix2[i][j];// 输入矩阵第【i + 1,j + 1】的值
		}
	}
	if (columns1 != rows2) {
		std::cout << "The two matrices cannot be multiplied.Please re-enter.";//判定第一个矩阵的列数是否等于第二个矩阵的行数
		return 0;
	}
	double** matrix3{ new double*[columns1] };//将第一个矩阵的列数作为第三个矩阵的行数
	for (size_t i = 0; i < columns1; ++i) {
		matrix2[i] = new double [rows2] {};//将第二个矩阵的行数作为第三个矩阵的列数
	}
	double* pvalue{ new double{ } };//设置一个中间值方便计算
	for (size_t i{}; i < rows1; ++i) {
		for (size_t j{}; j < columns2; ++j) {
			for (size_t k{}; k < columns1; ++k) {
			*pvalue = (matrix1[i][k] * matrix2[k][j]);//计算第一个矩阵第[i][k]个元素和第二个矩阵第[k][j]个元素的乘积
			matrix3[i][j] += *pvalue;//第三个元素第[i][j]个元素的值等于k个*pavlue的值的和
			}
		}
	}
	delete pvalue;//删除pvalue
	pvalue = nullptr;//重设指针
	for (size_t i{ }; i < columns1; ++i) {
		for(size_t j{ }; j < rows2; ++j){
			std::cout << std::setw(12) << matrix3;
		}
		std::cout << std::endl;
	}//遍历输出第3个矩阵
	for (size_t i{}; i < rows1; ++i)
		delete[] matrix1[i];//删除第一个矩阵的列
	delete[] matrix1;//删除第一个矩阵
	for (size_t i{}; i < rows2; ++i)
		delete[] matrix2[i];//删除第二个矩阵的列
	delete[] matrix2;//删除第二个矩阵
	for (size_t i{}; i < rows2; ++i)
		delete[] matrix3[i];//删除第二个矩阵的列
	delete[] matrix3;//删除第二个矩阵
}
  • 写回答

6条回答 默认 最新

  • CSDN专家-cpp_learner 2021-04-20 08:19
    关注

    double** matrix3 { new double*[columns1] };//将第一个矩阵的列数作为第三个矩阵的行数

    这个matrix3你定义了,没有像matrix1和matrix2那样对他内部的值进行分配内存。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?