一个奇怪的段错误SIG 11| Segment fault
时间:2011-12-19
来源:互联网
用OpenGLES2.0跑GLBenchmark2.0的时候,出现了Segment fault.
经过分析后发现具体的情况是这样的:
首先在类TestBase定义了一些纯虚函数。(如init,animate函数)
在类LowLevelTest中继承了类TestBase,并实现了纯虚函数,init和animate。
在类RenderCheckTest类中继承了类LowLevelTest,并且也实现了函数init和animate。
代码中创建了一个RenderCheckTest类的对象frameBufferTest指针。
RenderCheckTest *frameBufferTest = new GLB::RenderCheckTest();
Segment fault发生在紧接着的一句代码 frameBufferTest->init()
函数不会做任何调用,好像init这个函数指针就是非法的。
这里采用了命名空间的操作。 TestBase在默认的namespace里,LowLevelTest和RenderCheckTest在GLB命名空间中。
后来又进行了一些尝试:
1,使用frameBufferTest去调用一个功能相同但更改了函数名的pinit,函数可以调用(即调用自己的成员函数)。
2,将TestBase也定义在GLB的命名空间中,代码还是会在这里frameBufferTest->init()的地方出错。
我想这里可能涉及到了一些语法方面的细节,没有使用正确,或者是编译器出现了一些问题。
系统平台为linux。
请各位帮忙给予一些指引。
经过分析后发现具体的情况是这样的:
首先在类TestBase定义了一些纯虚函数。(如init,animate函数)
在类LowLevelTest中继承了类TestBase,并实现了纯虚函数,init和animate。
在类RenderCheckTest类中继承了类LowLevelTest,并且也实现了函数init和animate。
代码中创建了一个RenderCheckTest类的对象frameBufferTest指针。
RenderCheckTest *frameBufferTest = new GLB::RenderCheckTest();
Segment fault发生在紧接着的一句代码 frameBufferTest->init()
函数不会做任何调用,好像init这个函数指针就是非法的。
这里采用了命名空间的操作。 TestBase在默认的namespace里,LowLevelTest和RenderCheckTest在GLB命名空间中。
后来又进行了一些尝试:
1,使用frameBufferTest去调用一个功能相同但更改了函数名的pinit,函数可以调用(即调用自己的成员函数)。
2,将TestBase也定义在GLB的命名空间中,代码还是会在这里frameBufferTest->init()的地方出错。
我想这里可能涉及到了一些语法方面的细节,没有使用正确,或者是编译器出现了一些问题。
系统平台为linux。
请各位帮忙给予一些指引。
作者: joe_8086 发布时间: 2011-12-19
没有人回帖,但是这个问题还是希望能够有人给予一些方向上和思路上的指引。自己顶一下贴。
作者: joe_8086 发布时间: 2011-12-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28