浅浅_mo 2014-08-18 22:29 采纳率: 0%
浏览 2873

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条回答 默认 最新

  • 天马321 2014-08-19 00:54
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 Stata 面板数据模型选择
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用