3

我正在为 Windows 和 Mac(VST 和 AU)开发音频插件,我遇到了仅在 64 位主机 DAW(在我的情况下为 Reaper)中打开插件时出现的问题操作系统 10.8。

该插件是一个通用二进制构建,在 32 位主机中运行良好,但在 Reaper 64 位中打开它会导致它在分配过滤器对象的随机新/删除指令上崩溃。我尝试将其构建为 64 位插件只是为了进行测试,但同样的事情发生了。

什么可能导致这种情况发生?

编辑:这是崩溃报告的屏幕截图: 在此处输入图像描述

4

1 回答 1

0

我发现使用 64 位主机时导致随机内存错误的问题。有一个 memset 函数引用指针的大小,声明为浮点数,以清除其内容。当然,在 64 位主机上,指针大小为 64 位,因此 memset 函数破坏了堆,从而导致反复无常的内存错误。

这是 memset 函数:

float *z;
//...
memset(z, 0, sizeof(z)*size);

目的是如果 z 最终声明为双精度,则此函数将自动调整分配的内存块。我忽略了在 64 位上下文中会发生什么。

于 2013-01-14T04:35:22.503 回答