memcpy 导致Access Violation错误,怎么回事? 程序需要多次调用memcyp函数,前面几次对,后面出错。memcpy(dpControlPoints, value, (iRow+1)*(iColumn+1)*3*sizeof(double));memcpy(dpControlWeights, value, (iRow+1)*(iColumn+1)*sizeof(double));memcpy(dpKnotsU, value, (iRow+iUOrder+2)*sizeof(double)); 三条语句中value的值不同,iRow、Column值相同,iUOrder比iUOrder小。也就是第三次调用memcpy时,所需空间比前两次小很多。前面两句对,后面一句在iRow数值稍大时出问题。请问为什么?

解决方案 »

  1.   

    void *memcpy( void *dest, const void *src, size_t count );
    你那个Value是什么?
      

  2.   

    @schlafenhamster
    @heksn
    谢谢你们的回复。
    三次调用时,value 是三个不同的double型指针,都是作为函数参数传递的。将value的指向的数值赋给dpKnotsU。在memcpy之前用了memset。
    memset(dpControlPoints, 0, MAXCONTROLPOINTS*sizeof(double));
    memset(dpControlWeights, 0, MAXCONTROLPOINTS*sizeof(double)/3);
    memset(dpKnotsU, 0, MAXKNOTS*sizeof(double));
    我奇怪的是,数据类型一样,调用方式也一样,为什么前两次不出错,最后一次出错?
    越界是什么意思?该怎么处理?
      

  3.   

    @schlafenhamster @heksn @MagicFuzzX @Reborn
    谢谢各位,问题找到了,参数dpKnotsU是一个double型数组,将其长度定义的大一些就可以了。
    这也是内存的事情吧?内存、越界……真让人难受呀。