首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的fluidsynth断言( 'settings != NULL')结果

奇怪的fluidsynth断言( 'settings != NULL')结果
EN

Stack Overflow用户
提问于 2011-12-12 16:22:25
回答 1查看 150关注 0票数 0

下面的小示例程序给了我一个断言错误('settings != NULL‘失败),我不明白为什么它认为设置结构指针为NULL。

文件test.c:

代码语言:javascript
复制
#include <fluidsynth.h>

int main(int argc, char** argv) 
{
    fluid_settings_t* settings = new_fluid_settings();
    fluid_synth_setint(settings, "synth.polyphony", 128); //assertion error
    delete_fluid_settings(settings);
    return 0;
}

编译: gcc test.c -lfluidsynth。

我尝试打印new_fluid_settings()返回的地址,但它似乎是一个有效的地址。

所以我搜索了fluidsynth 1.1.5源代码,找到了文件utils/fluid_settings.c的1213行:

代码语言:javascript
复制
fluid_return_val_if_fail (settings != NULL, 0);

但fluid_return_val_if_fail只是一个简单的宏,用于调用GLib的g_return_val_if_fail (utils/fluid_sys.h:59)。

因为设置地址是有效的,所以我想不出其他地址。空指针不是真的指向地址0x00吗?

我是不是忘了什么重要的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-12 17:21:29

在使用之前打印地址,例如使用printf("the settings are at %p\n", settings);;当然你也可以自己添加保护:

代码语言:javascript
复制
if (settings != NULL)
{
  fluid_synth_setint(settings, "synth.polyphony", 128);
}

如果是_new()调用失败了,那么您当然需要深入研究为什么会发生这种情况。

过去,您必须手动初始化FluidSynth似乎所依赖的glib库,但这不再是必要的。

我看了一下,它似乎试图初始化设置对象内的互斥锁(我假设是为了使其线程安全),所以在调用new_fluid_settings()之前,您可能需要在main()中添加一个对g_thread_init()的调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8471546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档