下面的函数的目的是对一个矩阵进行量化,将源矩阵相应点的值与参考矩阵相应点的值相除,得到的值为目的矩阵的相应点
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!!!
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!!!
当完成一次操作(调用)后,
下一次操作 传递给该函数的指针有问题, check 一下
能改变的只是src指针多指向的那个内存区
另外,你也可以这样修改函数的定义:void QuantizeMatrix(const double *src, const int *ref,int *dest,const int row, const int col) 如果调用或者代码逻辑有问题,有时在编译时就可以知道。
是我调用程序里犯了书写的错误,把一个变量名写成了相似的另一个变量名(colb写成了col),费了好大劲才发现。
谢谢各位并为我犯的这种幼稚的错误道歉!