• 9142阅读
  • 2回复

QVector的push_back导致程序崩溃,什么原因? [复制链接]

上一主题 下一主题
离线hxcan
 

只看楼主 倒序阅读 楼主  发表于: 2009-04-01
在我的代码中有一个:
  1. QVector <Router> RouterList

其中的Router是自定义的一个类,但是当我的代码中走到

    Router Router2Add;
    ……
    RouterList.push_back(Router2Add); //添加。

的时候,程序就崩溃了,调试的时候跟踪到了qvector.h的第521行,代码是这样的:

template <typename T>
void QVector<T>::append(const T &t)
{
    if (d->ref != 1 || d->size + 1 > d->alloc) {
        const T copy(t);
        realloc(d->size, QVectorData::grow(sizeOfTypedData(), d->size + 1, sizeof(T),
                                           QTypeInfo<T>::isStatic));
        if (QTypeInfo<T>::isComplex)
            new (d->array + d->size) T(copy);
        else
            d->array[d->size] = copy;
    } else {
        if (QTypeInfo<T>::isComplex)
            new (d->array + d->size) T(t);
        else
            d->array[d->size] = t;
    }
    ++d->size;
}

其中的

    if (d->ref != 1 || d->size + 1 > d->alloc) {

这就是第521行。
调试器显示,copy()函数的参数t跟我传进去的Router2Add是一样的,但是copy的结果却不一样。请问这是什么原因呢?
还想问一下,copy是不是相当于Router的拷贝构造函数?
我用的是QT4.5。
本座已达到法定娶亲年龄,欲购从速,价格面谈。
杀人容易爱人难。
作为一个太极美术工程师,我深刻地感受到:世风日下、人心不古。
http://StupidBeauty.com/Blog
离线hxcan

只看该作者 1楼 发表于: 2009-04-02
问题补充。
我自己认为是这样的问题:
就是有一个对象Topology,它有一个QVector,这个QVector中的每个元素都是一个Router。而Router呢,它自己也有一个QVector,其中的每个元素是一个Routing。而Routing这个对象很规矩,其中只有一些QString什么的。
现在的问题就是,当我将一个Routing对象push_back进一个Router的时候,没有什么问题。而当我将一个Router对象push_back进入一个Topology的时候,程序就崩溃了。是不是因为Router对象中含有一个QVector导致它的大小不确定呢?那该怎么办呢?
本座已达到法定娶亲年龄,欲购从速,价格面谈。
杀人容易爱人难。
作为一个太极美术工程师,我深刻地感受到:世风日下、人心不古。
http://StupidBeauty.com/Blog
离线hxcan

只看该作者 2楼 发表于: 2009-04-02
终于知道了。
原来是因为我用的这个Topology对象没有初始化。
哎,这世道。
本座已达到法定娶亲年龄,欲购从速,价格面谈。
杀人容易爱人难。
作为一个太极美术工程师,我深刻地感受到:世风日下、人心不古。
http://StupidBeauty.com/Blog
快速回复
限100 字节
 
上一个 下一个