获取QString时出现分段错误
Segmentation fault when getting QString
这个奇怪的问题,已经和几个同事研究过了。。。使用Qt Creator和Qt 4.8.5
- 定义对象
- 使用setter设置多个值
- 使用getter请求值
- 结果:得到一个int没有问题,所有其他值都会导致分段错误
- 但是使用调试器中的断点,值会正确显示,因此它们在对象中
-
同样的代码以前工作,问题"刚刚出现"。编译器问题?
private: int id; QString name; public; int getId() { return this->id; } // OK void setId(int id) { this->id = id; } QString getName() { return this->name; } // SIGSEGV void setName(QString name) { this->name = name; }
有什么想法吗?知道同样的问题吗?
更新
更改了代码,基于评论,仍然是相同的问题
private:
int id;
QString name;
public;
int getId() { return id; } // OK
void setId(int setTo) { id = setTo; }
QString getName() { return name; } // SIGSEGV
void setName(QString setTo) { name = setTo; }
我也面临类似的问题。虽然我找不到这个问题的根本原因,但我有另一个观察。如果我们使用范围解析运算符在类声明之外定义getter函数,那么代码就可以工作了。
QString MyClass::GetX(void) {
return mX;
}
QString MyClass::GetY(void) {
return mY;
}
class MyClass
{
public:
MyClass(){}
/* Functions for setting mX and mY strings. */
QString GetX(void);
QString GetY(void);
isDataAvailable()
{
return mAvailable;
}
private:
bool mAvailable;
QString mX;
QString mY;
};
正如我所理解的,在C++中,如果我们在类声明中定义一个函数,默认情况下它是内联的。。。因此,问题可能与函数的内联有关。
进一步思考在内存中创建对象的方式,我认为QString可能没有保留固定数量的字节,这可能是这种奇怪行为的原因,你猜怎么着,一个伪更改解决了我的问题。。。
这感觉是一个非常"肮脏"的解决方案,但至少我可以继续我的工作;-)但任何关于根本原因的想法都将不胜感激!感谢所有宝贵的评论!!!
private:
QString name; // FIRST DEFINE QSTRING
int id; // THEN DEFINE INT
public;
int getId() { return id; } // OK
void setId(int setTo) { id = setTo; }
QString getName() { return name; } // OK
void setName(QString setTo) { name = setTo; }
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?