确定 - 我这里有一个有趣的。我工作的一个俄罗斯方块克隆(基本上为“水平式”我的技能)。我试图重构我的代码把它抽象我想它的方式。虽然这是以前工作得很好,现在我得到一个分段错误的任何图像可以被图混合之前。我已经试过了调试都无济于事。

我已经发布了项目的SVN工作副本这里

这只是一个小项目,有人比我更多的知识和良好的调试器可能会弄清楚的一个单元。唯一的依赖是 SDL 。荣誉对,可以告诉我什么,我做错了的人。

编辑:据我所知道的,我现在有什么我以前在逻辑上是相同的,所以我不认为我现在已经会导致段错误。只要运行在工作拷贝的svn revert恢复,重新编译,你可以看到它的工作...

有帮助吗?

解决方案

看第15行至Surface.cpp的18:

    surface = SDL_DisplayFormatAlpha( tempSurface );
    surface = tempSurface;
}
SDL_FreeSurface( tempSurface );

我假定它出现segfaults因为当你在以后使用该表面时,实际上是在tempSurface操作,因为这条线的:

surface = tempSurface;

和不通过SDL_DisplayFormatAlpha返回的表面()。既然你免费tempSurface,面现在指向无效的内存。要修正,只要将第二行中的其他块。

其他提示

我没有安装SDL我的机器上,而是通过代码照看。

我在Output.cpp文件注意到这个:

display = new Surface();

您什么都不做。这个构造函数是空的。 (表面没有被初始化)。

然后,在输出:: initalize()这样做:

display->surface = SDL_SetVideoMode( 800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF );

这看起来像问题表面::表面从来没有真正初始化。如果你还没有找到解决办法,当我回家我会Digg的内容。

据我了解,分段错误发生在你试图mnaipulate一个ponter它不再可用,或者你正在试图改变一个恒定的值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top