C++ C++;停止采样的快板

C++ C++;停止采样的快板,c++,allegro5,C++,Allegro5,我想在某一点停止我的样本,但它给我发送了一些奇怪的错误。 这是我的代码: ALLEGRO_SAMPLE_ID id; ALLEGRO_SAMPLE* spl = al_load_sample("sound.ogg"); al_play_sample(spl, 1.0, 0, 1.0, 0, &id); al_stop_sample(&id); al_destroy_sample(spl) 试试这个 ALLEGRO_SAMPLE_ID *id_sample = NULL; id_

我想在某一点停止我的样本,但它给我发送了一些奇怪的错误。 这是我的代码:

ALLEGRO_SAMPLE_ID id;
ALLEGRO_SAMPLE* spl = al_load_sample("sound.ogg");
al_play_sample(spl, 1.0, 0, 1.0, 0, &id);
al_stop_sample(&id);
al_destroy_sample(spl)
试试这个

ALLEGRO_SAMPLE_ID *id_sample = NULL;
id_sample = malloc(sizeof(ALLEGRO_SAMPLE_ID));
l_play_sample(sample, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_BIDIR, id_sample);
printf("id_sample %p\n", id_sample);
al_rest(2);
al_stop_sample(id_sample);
如前所述,Allegro很可能在播放对象试图停止并销毁之前被销毁了

你有没有确定在你摧毁了所有东西后,Allegro被去初始化了?我遇到了这个问题,将关闭代码放在atexit回调中,但让Allegro注册自定义atexit回调。在这种情况下,Allegro的atexit回调可能首先运行,因此您必须使用al_install_system(NULL,Allegro_VERSION_INT)代替al_init(),并在自定义atexit回调中调用al_uninstall_system()


“…向我发送了一些奇怪的错误…”是的,在控制台中它说断言失败:spl\u id->\u id=-1,file…这与原始代码中的相同,只是使用了heap而不是stack。给我同样的错误。