У меня есть метод, который генерирует огромный QVector<uchar>
(РАЗМЕР: 354792000), и память выделяется / освобождается динамически, для удобства я использую QScopedPointer:
void someMethod(int SIZE) {
chVec.reset(new QVector<uchar>(SIZE));
/*doing some stuff with an array...*/
chVec.data()->clear();
chVec.data()->squeeze();
}
Создание массивов небольшого размера- нет проблем, вы также можете создать один массив большого размера, но когда я снова вызываю метод, я получаю сообщение об ошибке «Недопустимый параметр, переданный функции времени выполнения C». Он прошел через отладчик, при попытке выделить место для нового массива возникает ошибка:
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));
}
Что бы это могло быть? Утечка памяти (невозможно выделить такой большой кусок непрерывной памяти снова, так как предыдущий вызов не освободил память?)? ... Я просто не могу понять, в чем проблема, перед тем как покинуть область действия метода, я даже вручную очищаю массив и освобождаю память ... Буду благодарен за любой совет