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

时间:2011-12-12 08:22:25

标签: c debugging glib

下面的小示例程序给我一个断言错误('settings!= NULL'失败)我无法理解为什么它认为设置结构指针是NULL。

文件test.c:

#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()返回的地址,但它对我来说似乎是一个有效的地址。

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

fluid_return_val_if_fail (settings != NULL, 0);

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

由于设置地址是有效的,我想不出别的东西。 NULL指针指向地址0x00是不是真的?

我忘记了重要的事情吗?

1 个答案:

答案 0 :(得分:0)

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

if (settings != NULL)
{
  fluid_synth_setint(settings, "synth.polyphony", 128);
}

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

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

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