有谁在eVC下用过IPP的,快来救我!要疯了。。
程序编译连接都正确,但我在模拟器中运行的时候,程序死了。我觉得奇怪,就单步运行看看,发现在程序中有一段分配内存的代码:
PredictBuffRow_Y = ippsMalloc_16s(16);
PredictBuffRow_Cb = ippsMalloc_16s(8);
PredictBuffRow_Cr = ippsMalloc_16s(8);
PredictBuffCol_Y = ippsMalloc_16s(16);
......
前面三行都过去了,到第四行就弹出对话框:
"First-Chance exception in dlg.exe:0xC0000005:Access Violation."
我上网查了查,有人说是内存在使用前被删掉了,但我没有。我始终觉得我的程序没有错,所以,我做了如下实验:
在eVC下生成一个对话框,加入下面几行代码:
         int i=1;
Ipp16s* Yu;
Yu=NULL;
Yu=ippsMalloc_16s(5);
ippsFree(Yu);
         Yu=NULL;
单步发现一切跟我想象的一样。
我再加:
         int i=1;
Ipp16s* Yu;
Ipp16s* Cb;
          Yu=NULL;
Cb=NULL;
Yu=ippsMalloc_16s(5);
ippsFree(Yu);
         Yu=NULL;
Cb=ippsMalloc_16s(15);
ippsFree(Cb);
          Cb=NULL;
在watch窗口中查看Yu,Cb,i的值发现:
运行Cb=ippsMalloc_16s(15);时,Yu应该为0x000000,但他却发生改变,为0x0000000f.
运行ippsFree(Cb);时,更奇怪的发生了,Yu发生改变,i值变成:0x00032920.怪了,关i什么事啊,我真的就搞不懂了。
如果再加几行ippMalloc_16s,就更是奇怪。而且,用ANSI的malloc一样有此情况。
恳请那位达人给我点意见。我已经折腾了一天了,再 搞不出来我就要疯了。谢谢!
    

解决方案 »

  1.   

    我刚刚发现:第一次分配之后,进行第二次分配。那么第二次分配的空间就吧第一次的冲吊了。所以后来Free第二次空间的时候报错。所以我说明是static后,就发现没有报access violationa的错误。这是我刚刚发现的。但我也不知道为什么!
    写在这里希望对有同样问题的人有帮助。同时希望大虾能指点一下。