首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QVector + QScopedPointer -传递给C运行时函数的无效参数

QVector + QScopedPointer -传递给C运行时函数的无效参数
EN

Stack Overflow用户
提问于 2019-11-03 11:47:22
回答 1查看 207关注 0票数 0

我有一个方法,它生成一个巨大的QVector<uchar> (大小: 354792000),并且动态地分配/释放内存,为了方便我使用QScopedPointer:

代码语言:javascript
复制
void someMethod(int SIZE) {
  chVec.reset(new QVector<uchar>(SIZE));
       /*doing some stuff with an array...*/
  chVec.data()->clear();
  chVec.data()->squeeze();
}

创建小大小的数组--没有问题,您也可以创建一个大小较大的数组,但是当我再次调用该方法时,我会得到“传递给C运行时函数的无效参数”的错误。通过调试器,当试图为新数组分配空间时会发生错误:

代码语言:javascript
复制
template <typename T>
QVector<T>::QVector(int asize, const T &t)
{
    Q_ASSERT_X(asize >= 0, "QVector::QVector", "Size must be greater than or equal to 0.");
    if (asize > 0) {
        d = Data::allocate(asize);
        Q_CHECK_PTR(d); /*<------ Error occured*/
        d->size = asize;
        T* i = d->end();
        while (i != d->begin())
            new (--i) T(t);
    } else {
        d = Data::sharedNull();
    }
}

数据::分配(分配);:

代码语言:javascript
复制
Q_REQUIRED_RESULT static QTypedArrayData *allocate(size_t capacity,
            AllocationOptions options = Default)
    {
        Q_STATIC_ASSERT(sizeof(QTypedArrayData) == sizeof(QArrayData));
        return static_cast<QTypedArrayData *>(QArrayData::allocate(sizeof(T),
                    Q_ALIGNOF(AlignmentDummy), capacity, options));
    }     

会是什么?内存泄漏(不可能再分配这么大一块连续内存,因为上一次调用没有释放内存?)我只是不明白问题出在哪里,在离开方法范围之前,我甚至手动清理数组并释放内存.如有任何建议,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-03 15:12:21

通过将mingw32改为mingw64解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58679850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档