2 u013419097 u013419097 于 2014.08.19 06:29 提问

c#在for循环里面,它说索引超出数组界限

它说这句有问题: c[sum] = a[x]; d[sum] = b[x];
问题部分代码是如下:
int t;
int k;
// int s;
int y;
Image img = new Image(dast1);
Emgu.CV.Structure.MCvScalar p;
t = img.Height; //获取图片的高
k = img.Width;//获取图片的宽

        double[] a = new double[k*t];//用来储存像素点的x坐标值
      double[] b = new double[k*t];//用来储存像素点的y坐标值
      double[] c = new double[k*t];//用来储存像素点的x坐标值
       double[] d = new double[k*t];//用来储存像素点的y坐标值

        unsafe
        {
            //int n = 0;
          //  int sum =k*t;

            double[] h = new double[k*t];//可能用来储存最后输出地x坐标
            double[] z = new double[k*t];//可能用来储存最后输出地y坐标

            for (int sum = 0;sum<(k*t) ; )
            {
                c[sum] = 0; d[sum] = 0;
                for (int v = 0; v < 9; v++)

                    for (y = (t / 10) * v; y < (t / 10) * (v+1); y++)  //y值总行数的1/10行遍历一次
                    {

                        //计算黑色点的个数,9-黑色点的个数=白色店的个数
                        // c[s] = 0; d[s] = 0;
                        //   for (int y = 3 * s; y < 3 * (s + 1); y++)
                        //  {//int n = 0;

                        //计算黑色点的个数,9-黑色点的个数=白色店的个数
                        // for (int x = 0; x < (k / 3); x++)
                        // {
                        for (int x = 0; x < k; x++)
                        {
                            // s = (x + 3);//下面3个坐标所谓一的辅助变量
                            // int n = 0;//计算白色坐标点的个数
                            //  while ((x < s) && ((x + 2) < k))//当还没到3个坐标时,并且还没遍历一行时
                            // {

                            p = CvInvoke.cvGet2D(img, y, x);//此时p中的值就是当前像x素点rgb值,注意此时的p.val[0]为b通道p.val[1]为g  p.val[2]为r
                            // Gray color = img[y, x]; 
                            if (p.v0 != 0)//如果坐标点为白色即为像素点
                            { //a[x] = w; b[x] = y; 
                                // n++;
                                a[x] = x; b[x] = y;
                                c[sum] = a[x]; d[sum] = b[x];
                                //为后面的排序做准备
                              //  c[i] = a[x]; d[i] = b[x];

                                //0.1代表1mm
                              //  textBox1.Text = ((x / 44) - 2 + (x % 43) * 0.1).ToString() + "&" + ((y / 44) - 2 + (y % 43) * 0.1).ToString() + " " + textBox1.Text;
                            }
                            else
                            {
                                a[x] = 0; b[x] = 0;

                            }

                            sum++;
                        }

学渣求大神指教!!!!

1个回答

qwuack
qwuack   2014.08.19 08:54

要么断点,要么输出日志
看看索引在哪越界的

Csdn user default icon
上传中...
上传图片
插入图片