gpt4 book ai didi

c++ - 来自 QMap.insert( QString, int ) 的段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:47 25 4
gpt4 key购买 nike

我从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;
}

然后......那就是它停止的地方 - 轰隆隆,段错误。根据那里的一些 Qt 论坛 - 在 Internet 领域 - 声明指向 QMap 的指针是不明智的。 s,我最初想这样做主要是因为发生这种情况的一个可能原因可能是 QMap可能没有正确初始化。然而,我认为它是一个具有默认构造函数的类成员这一事实与此相矛盾。

问题

根据上述,为什么会这样呢?可以做些什么?

想法

在有人提到我正在通过 const char* 之前到 QString参数,我应该注意到我已经尝试声明一个 QString 并将其作为参数传递。我可能还应该注意到,我是在 Qt Creator 中从 Ubuntu 11.10 运行它的。

最佳答案

What can be done about it?

只有一件事:在 valgrind 下运行您的程序,并修复您发现的所有问题。

为什么会这样?!?谁知道?你没有提供足够的信息。也许堆栈粉碎,也许你覆盖了一些数组的末尾,等等。

关于c++ - 来自 QMap.insert( QString, int ) 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8937129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com