QVector + QScopedPointer - 传递给 C 运行时函数的参数无效
QVector + QScopedPointer - Invalid parameter passed to C runtime function
我有一个方法,它生成一个巨大的QVector<uchar>
(SIZE:354792000),并且内存是动态的allocated/freed,为了方便我使用QScopedPointer:
void someMethod(int SIZE) {
chVec.reset(new QVector<uchar>(SIZE));
/*doing some stuff with an array...*/
chVec.data()->clear();
chVec.data()->squeeze();
}
创建小数组 - 没问题,您也可以创建一个大数组,但是当我再次调用该方法时,出现错误 "Invalid parameter passed to C runtime function"。它通过调试器,尝试为新数组分配 space 时发生错误:
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();
}
}
Data::allocate(asize); :
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));
}
会是什么?内存泄漏(不可能再次分配如此大的连续内存块,因为之前的调用没有释放内存?)? ...我只是不明白问题出在哪里,在离开方法范围之前,我什至手动清理数组并释放内存...如果有任何建议,我将不胜感激
将mingw32改成mingw64解决了问题
我有一个方法,它生成一个巨大的QVector<uchar>
(SIZE:354792000),并且内存是动态的allocated/freed,为了方便我使用QScopedPointer:
void someMethod(int SIZE) {
chVec.reset(new QVector<uchar>(SIZE));
/*doing some stuff with an array...*/
chVec.data()->clear();
chVec.data()->squeeze();
}
创建小数组 - 没问题,您也可以创建一个大数组,但是当我再次调用该方法时,出现错误 "Invalid parameter passed to C runtime function"。它通过调试器,尝试为新数组分配 space 时发生错误:
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();
}
}
Data::allocate(asize); :
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));
}
会是什么?内存泄漏(不可能再次分配如此大的连续内存块,因为之前的调用没有释放内存?)? ...我只是不明白问题出在哪里,在离开方法范围之前,我什至手动清理数组并释放内存...如果有任何建议,我将不胜感激
将mingw32改成mingw64解决了问题