gpt4 book ai didi

c++ - 奇怪的英特尔 C++ 编译器错误

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:34 29 4
gpt4 key购买 nike

我正在研究这个 VST 卷积插件(Windows 7 64 位,VS2010),我决定尝试使用英特尔 C++ 编译器。我当时正在优化算法,所以我有一个备份项目以防出现任何问题,还有一个我正在做实验。这两个项目都可以毫无问题地编译和运行。安装英特尔编译器后,虽然我正在试验的项目会导致堆损坏错误,所以我开始调试以追踪问题,但我找不到导致它的代码行,因为在期间未触发堆损坏错误执行但在 DLL 终止之后(调试器也没有显示访问冲突)。

在这一点上,我开始删除部分代码以查看是否可以隔离问题,并且我发现(很明显)这是我正在试验的类(class)。现在奇怪的部分来了:我可以更改方法内部的代码,但是只要我向备份类(工作正常的那个)添加一个变量,即使是一个 int,我也会收到堆损坏错误,只是一个 decleared 和从不引用变量就足够了。

这是 CRTConvolver 类:

class CRTConvolver
{
public:

CRTConvolver();
~CRTConvolver();

bool Init(float* Imp, unsigned ImpLen, unsigned DataLen);
void doConv(float* input);

Buff Output;

int debug_test;

private:

void ZeroVars();
int Order(int sampleFrames);
template <class T> void swap ( T& a, T& b );

Buff *Ir_FFT,*Input_FFT,Output2,Tmp,Prev,Last;
float *Tail;

unsigned nBlocks,BlockLen,Bl_Indx;

IppsFFTSpec_R_32f* spec;

};

那个“int debug_test;”完美运行的 VST 模块与从 Cubase 初始化时崩溃的程序之间存在差异。

这里总是为了调试目的是 destr 和 constr:

CRTConvolver::CRTConvolver()
{
//IppStatus status=ippInit();
//ZeroVars();
}

CRTConvolver::~CRTConvolver()
{
//Init(NULL,NULL,NULL);
}

这是 Buff 类的样子:

class Buff {
public:
Buff();
Buff(unsigned len);
~Buff();

float* buff;
unsigned long length;

private:

void Init(unsigned long len);
void flush();

friend class CRTConvolver;
}



Buff::Buff()
{
length=NULL;
buff=NULL;
}

Buff::~Buff()
{
// flush();
}

基本上这个类如果创建和销毁绝对什么都不做,它只包含 length 和 buff 变量。如果我也绕过这两个变量初始化,堆错误就会消失。

软件在 CRTConvolver 类的简单构造和随后的销毁时崩溃,即使它什么也没做,这部分对我来说真的没有意义......

作为旁注,我像这样创建我的 CRTConvolver 类:

ConvEng = new CRTConvolver[NCHANNELS];

如果我这样声明:

CRTConvolver ConvEng[NCHANNELS];

我在变量 ConvEng 周围遇到堆栈损坏错误。如果我切换回 Microsoft 编译器,即使编译和运行之前可以无错误运行的完全相同的版本,情况也会保持不变......

我怎么强调都不为过,在安装英特尔编译器之前一切都运行良好,是否可能出现问题或某处不兼容?

我真的没有办法了,希望有人能提供帮助。

谢谢

最佳答案

猜测,因为问题很可能是未定义的行为,但在您代码的其他地方:

遵守三个规则。您应该有复制构造函数和赋值运算符。如果您正在使用 std 容器,或者进行复制或分配,如果没有这些容器,如果您在析构函数中删除内存,就会遇到麻烦。

关于c++ - 奇怪的英特尔 C++ 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11504067/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com