不要问我为什么,反正它就是发生了,我不能保证你的问题和我的情况一样。
今天编译的时候,出现了下列的错误:
Fatal error: Internal fault: 0x0ce4 in ‘xxxx’
xxxx为函数名,如果你在错误上点了的话,会跳转到程序的结尾,反正不在那个函数上(我用emacs,编译出错可以直接跳转岛错误的地方)。根据常识,这又是个不明的错误。我的代码结构大致如下:
class A
{
public:
void drawsubString(const String& str, int num, int x, int y)
{
drawStringAll(str.subString(0, num), x, y);
}
void drawStringAll(const char* str, int x, int y)
{
//描绘文字操作
}
void drawText(const char* text[], int x, int y, int text_length)
{
for(int i = 0; i < text_length; i++) {
drawsubString(text[i], 10, x, y); //这里的10的参数为随意写的,真实的是变量。
}
}
};
上述代码貌似没有什么问题,String类为我自己做的,也基本上没有什么问题的,支持从const char*到String的转换,以及String岛const char*的转换,均无任何问题,String::subString的实现如下:
class String
{
public:
//这里简化操作,原始程序使用模板实现。
String& subString(int offset, int length) const
{
}
};
按道理来说,应该没问题,即使出现模糊的含义,编译器也应该提示的,但结果上述的操作就会直接的报告类似这样的错误:
Fatal error: Internal fault: 0x0ce4 in 'A::drawsubString'
目前的提示应该是上述的,但也有可能提示在函数 'A::drawText'
对于这一问题,我不知道是何原因,VS.net的编译器应该没有问题,gcc for arm的编译器我没有测试过,不清楚。现在唯一的修改办法是这样的:
class A
{
public:
void drawsubString(const String& str, int num, int x, int y)
{
//添加一个临时变量
String temp = str.subString(0, num);
drawStringAll(temp, x, y);
}
void drawStringAll(const char* str, int x, int y)
{
//描绘文字操作
}
void drawText(const char* text[], int x, int y, int text_length)
{
for(int i = 0; i < text_length; i++) {
drawsubString(text[i], 10, x, y); //这里的10的参数为随意写的,真实的是变量。
}
}
};
也有可能是我对c++规范的理解还不够深刻,真的希望有一天可以安心的看下规范。
另外,昨天提到的ubuntu的那个gave up的问题,结果出来了,还是不可以。看来还得接着找答案。我用的是btrfs分区,其他分区格式会不会好些呢?但之前的fedora就从来没有碰到这样的问题。