为什么在64位应用程序中运行但在32位应用程序中运行的32位插件中,内存分配/释放会失败?

时间:2013-01-13 23:16:08

标签: macos plugins new-operator 32bit-64bit delete-operator

我正在为Windows和Mac(VST和AU)开发音频插件,我遇到的问题只有在64位主机DAW中打开插件时才会出现(在我的情况下)收割机)在OSX 10.8中。

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

可能导致这种情况发生的原因是什么?

编辑:以下是崩溃报告的截屏: enter image description here

1 个答案:

答案 0 :(得分:0)

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

这是memset函数:

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

意图是,如果z最终声明为double,则在此函数中将自动调整分配的内存块。我忽略了在64位环境中会发生什么。