首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发布模式下的OpenAL软崩溃(调试工作正常)

发布模式下的OpenAL软崩溃(调试工作正常)
EN

Stack Overflow用户
提问于 2016-06-17 19:33:05
回答 1查看 541关注 0票数 1

我在C++中创建了一个小示例程序,试图用OpenAL软播放声音。程序在发布模式下编译时崩溃,在调试模式下编译时运行正常。我在OS上使用1.17.2。

我收到以下错误消息:

SoundTest(28958,0x70000021d000) malloc:*对象错误对象0x7fdd26062c8:释放对象后可能修改了不正确的校验和。

这是完整的示例程序:

代码语言:javascript
复制
#include <iostream>
#include <AL/alc.h>
#include <AL/al.h>
#include <cmath>

using namespace std;

int main() {
    // Reset error state just to be sure
    alGetError();

    ALCdevice *device = alcOpenDevice(NULL);
    if (device == NULL) {
        cout << "Error creating device" << endl;
        return 1;
    }

    ALCcontext *context = alcCreateContext(device, NULL);
    if (!alcMakeContextCurrent(context)) {
        cout << "Failed to make context current" << endl;
        return 1;
    }

    ALuint buffer;

    // Set up sound buffer
    alGenBuffers((ALuint)1, &buffer);

    // Fill buffer with sine-wave
    float freq = 440.f;
    int seconds = 4;
    unsigned sample_rate = 22050;
    size_t buf_size = seconds * sample_rate;

    short *samples;
    samples = new short[buf_size];
    for(int i=0; i<buf_size; ++i) {
        samples[i] = (short) (32760 * sin((2.f * float(M_PI) * freq) / sample_rate * i ));
    }

    alBufferData(buffer, AL_FORMAT_MONO16, samples, buf_size, sample_rate);

    ALuint source;

    // Set up sound source
    alGenSources((ALuint)1, &source);
    alSourcef(source, AL_PITCH, 1);
    alSourcef(source, AL_GAIN, 1);
    alSource3f(source, AL_POSITION, 0, 0, 0);
    alSource3f(source, AL_VELOCITY, 0, 0, 0);
    alSourcei(source, AL_LOOPING, AL_FALSE);
    alSourcei(source, AL_BUFFER, buffer);

    // Start playing
    alSourcePlay(source);

    // Wait until the sound stops playing
    ALenum state;
    do {
        alGetSourcei(source, AL_SOURCE_STATE, &state);
    } while (state == AL_PLAYING);

    // Clean up
    alDeleteSources(1, &source);
    alcMakeContextCurrent(NULL);
    alcDestroyContext(context);
    alcCloseDevice(device);

    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-30 18:37:37

如果其他人也有同样的问题,请使用看看这个。这个问题现在解决了。

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

https://stackoverflow.com/questions/37889119

复制
相关文章

相似问题

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