【发布时间】:2014-08-04 16:58:52
【问题描述】:
此代码在 n=10,000 时运行良好,但在具有 2GB 内存的机器上 n=100,000 时运行良好。 在具有 1GB 内存的机器上调用 kswap0 时 n=10,000,但立即显示 n=100,000 的分段错误。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int **createMatrix(int n)
{
int **mat=(int**)malloc(n*sizeof(int*));
int i;
for(i=0;i<n;i++)
{
mat[i]=(int*)malloc(n*sizeof(int));
}
return mat;
}
void display(int **mat, int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",mat[i][j]);
}
printf("\n");
}
}
int main()
{
int n=100000;
int **matrixOne=createMatrix(n);
int **matrixTwo=createMatrix(n);
int **resultantMatrix=createMatrix(n);
srand(time(NULL));
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
matrixOne[i][j]=rand()%10;
matrixTwo[i][j]=rand()%10;
}
}
display(matrixOne,n);
display(matrixTwo,n);
int k;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
resultantMatrix[i][j]+=matrixOne[i][k]*matrixTwo[k][j];
}
}
}
display(resultantMatrix,n);
for(i=0;i<n;i++)
{
free(matrixOne[i]);
free(matrixTwo[i]);
free(resultantMatrix[i]);
}
提前谢谢你!
【问题讨论】:
-
提示:你需要检查
malloc的结果。一旦内存不足,malloc就会开始返回NULL。 -
BTW 需要初始化 E.g
resultantMatrix[i][j]=0; -
如果您的设备可以 (a) 分配这么多内存,并且 (b) 拉动
20,000,000,000以完成 PRNG(我怀疑谁的周期明显短于那个)在不允许您旋转轮胎和粉刷房屋的时间段内,我想要您的硬件。