下面的小示例程序给了我一个断言错误('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()返回的地址,但它似乎是一个有效的地址。
所以我搜索了fluidsynth 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)。
因为设置地址是有效的,所以我想不出其他地址。空指针不是真的指向地址0x00吗?
我是不是忘了什么重要的事情?
发布于 2011-12-12 17:21:29
在使用之前打印地址,例如使用printf("the settings are at %p\n", settings);;当然你也可以自己添加保护:
if (settings != NULL)
{
fluid_synth_setint(settings, "synth.polyphony", 128);
}如果是_new()调用失败了,那么您当然需要深入研究为什么会发生这种情况。
过去,您必须手动初始化FluidSynth似乎所依赖的glib库,但这不再是必要的。
我看了一下,它似乎试图初始化设置对象内的互斥锁(我假设是为了使其线程安全),所以在调用new_fluid_settings()之前,您可能需要在main()中添加一个对g_thread_init()的调用。
https://stackoverflow.com/questions/8471546
复制相似问题