阿呆 发表于 2008-7-29 22:42:59

CVI报错问题,

先是定义了一个给二维数组动态分配内存的函数:
int **malloc2(int row, int col, int size)
{
    int **arr;
    arr = (int **) malloc(sizeof(int*) * row + size * row * col);
    if (arr != NULL)
    {
   int *head,count;
      head = (int*) arr + sizeof(int *) * row;
      memset(arr, 0, sizeof(int *) * row + size * row * col);
       //while (row--)
       //   arr = head + size * row * col;
                for(count = 0; count < row ; count++)
                {
                        arr = head + size*count*col;
                }       
          
    }
    return arr;
}
调用:moban=(int**)malloc2(1024, 1024, sizeof(int));
在运行是出现的错误:
NON-FATAL RUN-TIME ERROR:    Out-of-bounds pointer arithmetic: 12289 bytes (3073 elements) past end of array.
自己弄了两天了也没解决问题,希望各位高手帮帮我啊,感激涕零!

cpubbs 发表于 2008-7-29 23:14:45

兄弟将分配的内存调大点,应该是溢出了导致的!

阿呆 发表于 2008-7-29 23:36:19

回复 2# cpubbs 的帖子

我也觉得可能是溢出导致的,可是这个函数本身就是给二维数组分配内存的,arr = (int **) malloc(sizeof(int*) * row + size * row * col); 分配了4*1024*1024的空间,不会溢出啊!
报错是在 arr = head + size*count*col;这一行,count执行到256就停止了,接着就报错。

tonwelzt 发表于 2008-8-1 15:37:19

回复 1# 阿呆 的帖子

应该是跟数据益处有关,前段时间我也遇到同样的错误,后来把数组调大后就没有了.

cpubbs 发表于 2008-8-2 09:31:19

单步运行查查看是哪个地方,然后对应着调,这样才好查出来!
页: [1]
查看完整版本: CVI报错问题,