gpt4 book ai didi

c++ - 如果我让程序运行一段时间会出现异常

转载 作者:行者123 更新时间:2023-11-28 03:58:52 25 4
gpt4 key购买 nike

  • 平台:Win32
  • 语言:C++

如果我让程序运行一段时间(约 10 分钟),我会收到错误消息。

Unhandled exception at 0x10003fe2 in ImportTest.exe: 0xC0000005: Access violation reading location 0x003b1000.

我认为这可能是内存泄漏,但我不知道如何找出来。

我也无法“free()”内存,因为它总是导致(也许我不应该在变量上使用 free()):

Unhandled exception at 0x76e81f70 in ImportTest.exe: 0xC0000005: Access violation reading location 0x0fffffff.

在那个阶段程序没有做任何事情,它只是在等待用户输入

dllHandle = LoadLibrary(L"miniFMOD.dll");

playSongPtr = (playSongT)GetProcAddress(dllHandle,"SongPlay");
loadSongPtr = (loadSongT)GetProcAddress(dllHandle,"SongLoadFromFile");

int songHandle = loadSongPtr("FILE_PATH");

// ... {just output , couldn't cause errors}

playSongPtr(songHandle);
getch(); // that is where it causes an error if i leave it running for a while

编辑 2:

playSongPtr();

导致问题。但我不知道如何修复它

最佳答案

我认为很明显您的程序存在错误。如果您不知道从哪里开始寻找,一个有用的技术是“分而治之”。

从您的程序开始,您就可以使异常发生。删除一半代码,然后重试。如果异常仍然发生,那么您需要查看的代码就减少了一半。如果没有发生异常,那么它可能与您刚刚删除的代码有关。

重复上述操作,直到找出问题。

更新:您说“在那个阶段程序没有做任何事情”但显然它正在做某事(否则它不会崩溃)。您的程序是控制台模式程序吗?如果是这样,您使用什么功能来等待用户输入?如果不是,那么它是一个 GUI 模式的程序吗?您是否打开了一个对话框并等待某事发生?你有没有运行任何 Windows 定时器?有什么话题吗?

更新 2:根据您发布的一小段代码,我很确定如果您尝试删除对 playSongPtr(songHandle) 的调用功能,那么您的问题很可能会消失。您将不得不调查“miniFMOD.dll”的要求。例如,该 DLL 可能假定它在 GUI 环境而不是控制台程序中运行,并且可能执行不一定在控制台模式下工作的操作。此外,为了在后台执行任何操作(包括播放歌曲),该 DLL 可能需要创建一个线程来定期加载歌曲的下一部分并将其排入播放缓冲区。您可以在任务管理器(或更好的进程资源管理器)中检查程序创建的线程数。如果它不止一个,那么还有其他您无法直接控制的事情正在发生。

关于c++ - 如果我让程序运行一段时间会出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1935371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com