我已发布项目here的SVN工作副本。
这只是一个小项目,而且比我更有知识的人和一个好的调试器可能会很快解决它。唯一的依赖是SDL。感谢那些可以告诉我自己做错了什么的人。
编辑:据我所知,我现在所拥有的和以前所拥有的在逻辑上是一样的,所以我不认为我现在所拥有的会导致分段错误。只需在工作副本上运行一个svn revert,重新编译就可以看到它正在工作......
答案 0 :(得分:4)
查看Surface.cpp的第15至18行:
surface = SDL_DisplayFormatAlpha( tempSurface );
surface = tempSurface;
}
SDL_FreeSurface( tempSurface );
我认为它是段错误的,因为当你稍后使用这个表面时,你实际上是因为这行而在tempSurface上运行:
surface = tempSurface;
而不是SDL_DisplayFormatAlpha()返回的曲面。由于你释放了tempSurface,surface现在指向无效的内存。要修复,只需删除else块中的第二行。
答案 1 :(得分:0)
我的机器上没有安装SDL,但查看了代码后。
我在Output.cpp文件中注意到了这一点:
display = new Surface();
你什么都不做。这个的构造函数是空的。 (表面未初始化)。
然后在Output :: initalize()中执行:
display->surface = SDL_SetVideoMode( 800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF );
这看起来像Surface :: surface从未实际初始化过。如果你还没有找到解决方案,当我回到家时,我会深入了解它。
答案 2 :(得分:0)
据我了解,当您尝试使用不再可用的ponter时,或者您尝试更改常量值时会发生分段错误。