一段时间后,我再次使用IPP进行编码,并从Windows 7更新到Windows10。但是现在,当我可以使用ipp malloc函数时,它似乎破坏了变量的值。
例如此代码:
#include <stdio.h>
#include "ipp.h"
int main(void)
{
IppiSize roiSize = {128,128};
IppiSize kernelSize= {3,3};
int srcStep = 0;
Ipp8u* pSrc = NULL;
printf("%d %d \n", roiSize.width, roiSize.height);
printf("%d %d \n", kernelSize.width, kernelSize.height);
pSrc = ippsMalloc_8u(0);
printf("%d %d \n", roiSize.width, roiSize.height);
printf("%d %d \n", kernelSize.width, kernelSize.height);
return 0;
}
返回:
128 128
3 3
128 0
3 128
因此它修改了roiSize和kernelSize的值,即使它不是故意的。标准C malloc可以正常工作,并且不会破坏变量。 我在Windows 10专业版1709上使用cygwin x86 gcc 7.4.0编译(没有任何警告),使用
HDIR = "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.1.144\windows\ipp\include"
LDADD = "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.1.144\windows\redist\ia32_win\ipp" -lippi -lipps -lippvm -lippcore -lippvm -lm
CXXFLAGS = -O0
SOURCES= test.cpp
OBJECTS1=$(patsubst %.cpp,%.o,$(SOURCES))
OBJECTS=$(patsubst %.c,%.o,$(OBJECTS1))
all debug profile static depend: $(OBJECTS)
g++ -o test.exe test.o $(CXXFLAGS) -L$(LDADD)
%.o: %.cpp
g++ -c $< $(CXXFLAGS) -I $(HDIR)
%.o: %.c
g++ -c $< $(CXXFLAGS) -I $(HDIR)
clean:
rm -f *.o
有人看到过这样的东西吗?我不知所措,找到问题的根本原因。