矩阵乘法,随机数大于1000

时间:2016-02-29 10:48:02

标签: c++ matrix matrix-multiplication

我试图将两个矩阵与随机生成的数字相乘,但我不断得到分段错误并且idk如何正确分配内存。

对此的任何帮助都会很棒

//这是代码

#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;
}

1 个答案:

答案 0 :(得分:1)

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

  

array [1000] [1000] = 4 * 1000 * 1000字节= 4000000

仅为3个阵列创建总计12000000个字节。

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

检查堆栈大小,应为8 MB

int *ptr=&a;
int i=0;

while(i < n-1)
{
     ptr++;
     i++;
}
i=0;

while(i <n-1)
{
    b[i]=*ptr;
    ptr--;
    i++;
}

这就是你如何处理堆,因为你想要1000到5000

/jsonp

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