我正在为Windows和Mac(VST和AU)开发音频插件,我遇到的问题只有在64位主机DAW中打开插件时才会出现(在我的情况下)收割机)在OSX 10.8中。
该插件是一个通用的二进制版本,在32位主机中运行良好,但在64位的Reaper中打开它会导致它在分配过滤器对象的随机新/删除指令上崩溃。我尝试将其构建为64位插件以进行测试,但同样的事情发生了。
可能导致这种情况发生的原因是什么?
编辑:以下是崩溃报告的截屏:
答案 0 :(得分:0)
我发现在使用64位主机时导致随机内存错误的问题。有一个memset函数引用指针的大小,声明为float,以清除它的内容。当然,在64位主机上,指针大小为64位,因此memset函数破坏了堆,导致变幻无常的内存错误。
这是memset函数:
float *z;
//...
memset(z, 0, sizeof(z)*size);
意图是,如果z最终声明为double,则在此函数中将自动调整分配的内存块。我忽略了在64位环境中会发生什么。