下面的函数的目的是对一个矩阵进行量化,将源矩阵相应点的值与参考矩阵相应点的值相除,得到的值为目的矩阵的相应点
void QuantizeMatrix(double *src,int *ref,int *dest,int row,int col)
{
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
dest[i*col+j]=(int)(src[i*col+j]/ref[i*col+j]);
}
但是通过调试,我发现调用该函数出现了一个严重的问题,本来我有一个数组,src,包含很多项(有多个8×8),我想按8×8大小一截一截地对其进行量化,于是我循环调用上面的函数,传递指针src进去,量化完成后src向后移动64位,但我调试发现,当调用完一次该函数时src指针竟然变为空的了,请问这是什么原因?我觉得这个函数中没有改变指针值的语句呀,即便是改了也无法返回呀,但当我将src传入前其值为0x02660040,调用后其值变成了0x00000000!!!

解决方案 »

  1.   

    >>当调用完一次该函数时src指针竟然变为空的了问题在函数调用点
    当完成一次操作(调用)后,
    下一次操作 传递给该函数的指针有问题, check 一下
      

  2.   

    跟踪第一次 QuantizeMatrix 函数退出时 src 的值,退出函数后再次调用 QuantizeMatrix 前所做的每一步操作。请问 “量化完成后src向后移动64位” 是怎么做的?
      

  3.   

    4楼的问的对,你这个“量化完成后src向后移动64位”是怎么回事,问题可能在这
      

  4.   

    该函数 根本无法改变 src 这个参数原始变量的值……
    能改变的只是src指针多指向的那个内存区
      

  5.   

    这个函数实现从逻辑上没有任何问题。应该是内存越界或者调用不当造成的。建议你将相关变量的定义和调用的代码全部贴出来。
    另外,你也可以这样修改函数的定义:void   QuantizeMatrix(const double   *src, const int   *ref,int   *dest,const int   row, const int   col) 如果调用或者代码逻辑有问题,有时在编译时就可以知道。
      

  6.   

    谢谢各位的热心解答,这个问题昨天晚上最终解决了,上午睡觉,现在才来回帖,不好意思。
    是我调用程序里犯了书写的错误,把一个变量名写成了相似的另一个变量名(colb写成了col),费了好大劲才发现。
    谢谢各位并为我犯的这种幼稚的错误道歉!