gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:06:20 25 4
gpt4 key购买 nike

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

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

什么会导致这种情况发生?

编辑:这是崩溃报告的屏幕截图: enter image description here

最佳答案

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

这是 memset 函数:

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

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

关于macos - 为什么在 64 位应用程序中运行的 32 位插件中内存分配/释放会失败,但在 32 位应用程序中不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14309375/

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