【发布时间】:2023-03-05 00:49:01
【问题描述】:
显然,SDL_Mixer 中的这个函数一直在死去,我不知道为什么。有没有人有任何想法?根据 Visual Studio 的说法,崩溃是由 Windows 在 realloc() 行中的某处触发断点引起的。
有问题的代码来自 SDL_Mixer 的 SVN 版本,如果有区别的话。
static void add_music_decoder(const char *decoder)
{
void *ptr = realloc(music_decoders, num_decoders * sizeof (const char **));
if (ptr == NULL) {
return; /* oh well, go on without it. */
}
music_decoders = (const char **) ptr;
music_decoders[num_decoders++] = decoder;
}
我使用的是 Visual Studio 2008,music_decoders 和 num_decoders 都是正确的(music_decoders 包含一个指针,指向字符串“WAVE”和 music_decoders。ptr 是 0x00000000,我能说的最好的情况是,崩溃似乎是在 realloc() 函数中。有人知道我该如何处理这个崩溃问题吗?如果归根结底,我不介意为了完成这项工作而进行一些重构。
【问题讨论】:
-
您是否在调试模式下构建?如果是这样,您可以在此处获得更多详细信息。它究竟在哪里崩溃?为什么会触发断点? (Windows 通常会告诉你原因)等等。
-
在调试模式下构建,将生成的 SDL_Mixer.DLL 文件和 *.pdb 文件复制到正在使用它的程序,在调试模式下构建/运行该程序,当它崩溃时,我看到崩溃发生在上述区域。
-
这是标记为 C++,但 SDL 项目是用 C 编写的。在 C++ 中,您可能会使用 std::vector,以避免出错的机会...
标签: c++ windows visual-studio-2008 breakpoints realloc