gpt4 book ai didi

c++ - 大于 1000 的随机数的矩阵乘法

转载 作者:行者123 更新时间:2023-11-30 05:31:06 24 4
gpt4 key购买 nike

我试图让两个具有随机生成数字的矩阵相乘,但我一直遇到段错误,不知道如何正确分配内存。

任何帮助都会很棒

//这是代码

#include<iostream>
#include<iomanip>
#include<stdlib.h>
#include<stdio.h>
#include<ctime>

using namespace std;
int main()
{
srand (1023);
int a[1000][1000], b[1000][1000], mult[1000][1000], r1, c1, r2, c2, i, j, k;
cout << "Enter rows and columns for first matrix: ";
cin >> r1 >> c1;
cout << "Enter rows and columns for second matrix: ";
cin >> r2 >> c2;

while (c1!=r2)
{
cout << "Error! column of first matrix not equal to row of second.";

}

cout << endl << endl;
for(i=0; i<r1; ++i)
for(j=0; j<c1; ++j)
{
cout<<"mult["<<i<<"]["<<j<<"]: "<<rand()%9+1<<" "; //random matrix 1
}

cout << endl<< endl;
for(i=0; i<r2; ++i)
for(j=0; j<c2; ++j)
{
cout<<"mult["<<i<<"]["<<j<<"]: "<<rand()%9+1<<" "; //random matrix 2
}

for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
{
mult[i][j]=rand()%9+1;
}


for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
for(k=0; k<c1; ++k)
{
mult[i][j]+=a[i][k]*b[k][j]; //matrix multiplication
}

cout << endl << "Output Matrix: " << endl;
clock_t begin = clock();
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
cout << " " << mult[i][j];
if(j==c2)
cout << endl;
clock_t end = clock();
double elapsed_secs = double(end-begin)*100;
cout<<"Elapsed Time: "<<elapsed_secs<<" milliseconds\n";
return 0;
}

最佳答案

您正在尝试在当前堆栈中创建超过 11 MB 的空间。

array[1000][1000] = 4 * 1000 * 1000 bytes = 4000000

您总共为 3 个数组创建了 12000000 个字节。

尝试减小数组的大小(或)获取矩阵的大小并尝试使用 new 在堆中创建数组。

检查你的堆栈大小,它应该是 8 MB

ulimit -a | grep stack

这就是你为堆所做的,因为你想要 1000 到 5000

   int** a = new int*[r1];
for(int i = 0; i < r1; ++i)
{
a[i] = new int[c1];
}

a[0][0] = 10;

std::cout << a[0][0] << std::endl;

// Delete all the columns
for(int i = 0; i < r1; ++i)
delete[] a[i];

delete []a ;

还要确保将值添加到 a[][] 和 b[][],现在您只需执行 cout 并打印前 2 个 for 循环中的值,我想这些应该在 a[][] 和b[][]

关于c++ - 大于 1000 的随机数的矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35697613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com