olcSoundMaker.h 中销毁后明显的方法调用

问题描述 投票:0回答:1

我无法想出更好的标题,请随意提出建议。

我尝试遵循 OneLoneCoder 的 关于声音合成的教程,我只看了第一个视频的一半,我的代码已经抛出了异常。 我所做的就是从

他的github
下载他的olcSoundMaker.h,并复制入口点:

#include <iostream>

#include "olcNoiseMaker.h"

double make_noise(double time)
{
    return 0.5 * sin(440.0 * 2 * PI * time);
}

int main()
{
    std::wcout << "Synthesizer, part 1" << std::endl;

    std::vector<std::wstring> devices = olcNoiseMaker<short>::Enumerate();

    for (auto d : devices)
    {
        std::wcout << "Found output device: " << d << std::endl;
    }

    olcNoiseMaker<short> sound(devices[0], 44100, 1, 8, 512);
    sound.SetUserFunction(make_noise);

    while (1) { ; }

    return EXIT_SUCCESS;
}

在视频中他运行得很好;对我来说,它开始发出声音,然后在

while (1)
循环 60-80 次迭代之后,它停止并发出以下声音:

Unhandled exception thrown: write access violation.
std::_Atomic_address_as<long,std::_Atomic_padded<unsigned int> >(...) was 0xB314F7CC.

来自

<atomic>
头文件,第 1474 行。

通过使用VS单步执行代码,我没有发现太多,除了它在每次运行期间发生在不同的时间,这可能意味着它与多线程有关,但我不确定,因为我不太了解熟悉该主题。

我发现这个问题是相似的,但即使它说[已解决],它也没有向我显示答案。

有人可以帮助摆脱这个异常吗?

c++ access-violation
1个回答
0
投票

就在前几天,当我开始编写波表合成器时,我遇到了类似的问题。就我而言,解决这种情况的方法是将项目配置更改为 x84。

© www.soinside.com 2019 - 2024. All rights reserved.