创建超大数组 栈数组大 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 错误应该不是堆栈溢出,数组分配在堆上的。可能是内存不足了。我在我的机器上试过了,不会出错。一个新创建的winform程序,运行click后,占用内存676M左右。我机器是win7,16G内存。 private void button1_Click(object sender, EventArgs e) { double[, , ,] dbTemp = new double[96, 96, 96, 96]; for (int i = 0; i < 96; i++) { for (int j = 0; j < 96; j++) { for (int k = 0; k < 96; k++) { for (int l = 0; l < 96; l++) { dbTemp[i, j, k, l] = 0; } } } }} 数组总长度最大不能超过int32的表示范围,不过96^4明显没有超应该是内存不足了 计算两个矩形矩阵的乘积//#region 矩阵乘法 public void MultiplyMatrix(float[,] MatrixEin, float[,] MatrixZwei, float[,] MatrixResult) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { MatrixResult[i, j] += MatrixEin[i, k] * MatrixZwei[k, j];//计算矩阵的乘积 } } } } #endregion//加载矩阵算法private void Form1_Load(object sender, EventArgs e) { //定义3个float类型的二维数组,作为矩阵 float[,] MatrixEin = new float[3, 3]; float[,] MatrixZwei = new float[3, 3]; float[,] MatrixResult = new float[3, 3]; //为第一个矩阵中的各个项赋值 MatrixEin[0, 0] = 2; MatrixEin[0, 1] = 2; MatrixEin[0, 2] = 1; MatrixEin[1, 0] = 1; MatrixEin[1, 1] = 1; MatrixEin[1, 2] = 1; MatrixEin[2, 0] = 1; MatrixEin[2, 1] = 0; MatrixEin[2, 2] = 1; //为第二个矩阵中的各个项赋值 MatrixZwei[0, 0] = 0; MatrixZwei[0, 1] = 1; MatrixZwei[0, 2] = 2; MatrixZwei[1, 0] = 0; MatrixZwei[1, 1] = 1; MatrixZwei[1, 2] = 1; MatrixZwei[2, 0] = 0; MatrixZwei[2, 1] = 1; MatrixZwei[2, 2] = 2; lab_First.Text += "第一个矩阵:\n"; //循环遍历第一个矩阵并输出 for (int i = 0; i < 3; i++) { lab_First.Text += "| "; for (int j = 0; j < 3; j++) { lab_First.Text += MatrixEin[i, j] + " "; } lab_First.Text += " |\r\n"; } lab_Second.Text = "第二个矩阵:\n"; //循环遍历第二个矩阵并输出 for (int i = 0; i < 3; i++) { lab_Second.Text += "| "; for (int j = 0; j < 3; j++) { lab_Second.Text += MatrixZwei[i, j] + " "; } lab_Second.Text += " |\r\n"; } MultiplyMatrix(MatrixEin, MatrixZwei, MatrixResult);//调用自定义方法计算两个矩阵的乘积 lab_Result.Text = "两个矩阵的乘积:\n"; //循环遍历新得到的矩阵并输出 for (int i = 0; i < 3; i++) { lab_Result.Text += "| "; for (int j = 0; j < 3; j++) { lab_Result.Text += MatrixResult[i, j] + " "; } lab_Result.Text += " |\r\n"; } } 600+MB的内存申请,对于32位程序是很大一笔开销,容易出现问题。编译成64B程序试试。 一个结构体构造方法参数旁边加:this()的问题 程序集“xxx”中的类型“yyy”的方法“zzz”没有实现。 CType请教 关于C#.net 制作vlc流媒体播放器的问题 C#获取“可移动盘”的状态 如何操作treeview的子结点和叶节点 想模拟下qq客户端 用C#写了个摄像头捕捉图像的控件,不知道如何才能在vb6中使用? 200分求开源的股票K线图控件!!!!!! 基于fetionsdk的二次开发界面一直无法登陆 有点奇怪!急啊 这个串口读写类,有没有什么地方可以优化??? timers.timer执行后,form.timer不执行了
private void button1_Click(object sender, EventArgs e)
{
double[, , ,] dbTemp = new double[96, 96, 96, 96]; for (int i = 0; i < 96; i++)
{
for (int j = 0; j < 96; j++)
{
for (int k = 0; k < 96; k++)
{
for (int l = 0; l < 96; l++)
{
dbTemp[i, j, k, l] = 0;
}
}
}
}
}
应该是内存不足了
//#region 矩阵乘法
public void MultiplyMatrix(float[,] MatrixEin, float[,] MatrixZwei, float[,] MatrixResult)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 3; k++)
{
MatrixResult[i, j] += MatrixEin[i, k] * MatrixZwei[k, j];//计算矩阵的乘积
}
}
}
}
#endregion
//加载矩阵算法
private void Form1_Load(object sender, EventArgs e)
{
//定义3个float类型的二维数组,作为矩阵
float[,] MatrixEin = new float[3, 3];
float[,] MatrixZwei = new float[3, 3];
float[,] MatrixResult = new float[3, 3];
//为第一个矩阵中的各个项赋值
MatrixEin[0, 0] = 2;
MatrixEin[0, 1] = 2;
MatrixEin[0, 2] = 1;
MatrixEin[1, 0] = 1;
MatrixEin[1, 1] = 1;
MatrixEin[1, 2] = 1;
MatrixEin[2, 0] = 1;
MatrixEin[2, 1] = 0;
MatrixEin[2, 2] = 1;
//为第二个矩阵中的各个项赋值
MatrixZwei[0, 0] = 0;
MatrixZwei[0, 1] = 1;
MatrixZwei[0, 2] = 2;
MatrixZwei[1, 0] = 0;
MatrixZwei[1, 1] = 1;
MatrixZwei[1, 2] = 1;
MatrixZwei[2, 0] = 0;
MatrixZwei[2, 1] = 1;
MatrixZwei[2, 2] = 2;
lab_First.Text += "第一个矩阵:\n";
//循环遍历第一个矩阵并输出
for (int i = 0; i < 3; i++)
{
lab_First.Text += "| ";
for (int j = 0; j < 3; j++)
{
lab_First.Text += MatrixEin[i, j] + " ";
}
lab_First.Text += " |\r\n";
}
lab_Second.Text = "第二个矩阵:\n";
//循环遍历第二个矩阵并输出
for (int i = 0; i < 3; i++)
{
lab_Second.Text += "| ";
for (int j = 0; j < 3; j++)
{
lab_Second.Text += MatrixZwei[i, j] + " ";
}
lab_Second.Text += " |\r\n";
}
MultiplyMatrix(MatrixEin, MatrixZwei, MatrixResult);//调用自定义方法计算两个矩阵的乘积
lab_Result.Text = "两个矩阵的乘积:\n";
//循环遍历新得到的矩阵并输出
for (int i = 0; i < 3; i++)
{
lab_Result.Text += "| ";
for (int j = 0; j < 3; j++)
{
lab_Result.Text += MatrixResult[i, j] + " ";
}
lab_Result.Text += " |\r\n";
}
}
编译成64B程序试试。