我从this线索中找到了信息,我开始怀疑那里提供的信息是否与我所面临的问题的原因有关。
QMap
采用以下模板参数:
QMap< QString, int >
我的主要问题是我正在初始化一个立方体类,并且在该类中包含应该执行非常具体的事情的各种调用。
其中一个特别围绕设置“QMap
成员”。
请注意以下事项:
mGeometry = new Geometry;
mGeometry->Init();
mCamera = QVector3D( 10.0, 10.0, 10.0 );
mCubeage.insert( "cubes", 0 );
mCubeage.insert( "cubes", 0 );
// ASCII兼容性
1)(呃哦)
#ifndef QT_NO_CAST_FROM_ASCII
inline QT_ASCII_CAST_WARN_CONSTRUCTOR QString(const char *ch) : d(fromAscii_helper(ch))
{}
2)
template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::iterator QMap<Key, T>::insert(const Key &akey,
const T &avalue)
{
detach(); //the called function
QMapData::Node *update[QMapData::LastLevel + 1];
QMapData::Node *node = mutableFindNode(update, akey);
if (node == e) {
node = node_create(d, update, akey, avalue);
} else {
concrete(node)->value = avalue;
}
return iterator(node);
}
第3)
bool operator==(const QMap<Key, T> &other) const;
inline bool operator!=(const QMap<Key, T> &other) const { return !(*this == other); }
inline int size() const { return d->size; }
inline bool isEmpty() const { return d->size == 0; }
inline void detach() { if (d->ref != 1) detach_helper(); } //the called function/if statement
inline bool isDetached() const { return d->ref == 1; }
inline void setSharable(bool sharable) { if (!sharable) detach(); d->sharable = sharable; }
inline bool isSharedWith(const QMap<Key, T> &other) const { return d == other.d; }
inline void setInsertInOrder(bool ordered) { d->insertInOrder = ordered; }
inline bool operator!=(int value) const
{
return _q_value != value;
}
4)
inline bool operator!=(int value) const
{
return _q_value != value;
}
而且......那就是它停止的地方 - BOOM,分段错误。根据一些Qt论坛 - 在互联网领域 - 宣称指向QMap
的指针是不明智的,我最初认为这主要是因为发生这种情况的一个可能原因可能是由于QMap
可能尚未正确初始化。然而,事实上,它是一个具有默认构造函数的类成员,我相信这与此相矛盾。
问题
根据以上所述,为什么会发生这种情况?可以做些什么呢?
思想
在有人提到我将const char*
传递给QString
参数的事实之前,我应该注意到我已经尝试声明一个QString并将其作为参数传递给我。我也应该注意到我是在Qt Creator中从Ubuntu 11.10运行的。
答案 0 :(得分:2)
可以做些什么呢?
只有一件事:在valgrind下运行你的程序,并解决你找到的所有问题。
为什么会这样???谁知道?您没有提供足够的信息。也许堆栈粉碎,也许你覆盖了一些数组的结尾等等。