解决方案 »

  1.   

    错误应该不是堆栈溢出,数组分配在堆上的。可能是内存不足了。我在我的机器上试过了,不会出错。一个新创建的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;
                            }
                        }
                        
                    }
                }
    }
      

  2.   

    数组总长度最大不能超过int32的表示范围,不过96^4明显没有超
    应该是内存不足了
      

  3.   

    计算两个矩形矩阵的乘积
    //#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";
                }
            }
      

  4.   

    600+MB的内存申请,对于32位程序是很大一笔开销,容易出现问题。
    编译成64B程序试试。