2010-06-14 2 views
2

У меня возникли некоторые проблемы в выделении памяти для массива динамически в C++ в Qt SDK ... Вот для я делаю:Как динамически выделять память для массивов в Qt C++?

int dx = 5; 
QPoint * qPoint; 
qPoint = new QPoint[dx+1]; 

Однако при попытке отладки коды, программа, просто падает когда он пытается выполнить третью строку .... какие-то подсказки?

+0

Он не должен врезаться это указывает на проблему в другом месте в коде –

ответ

5

Если вы хотите правильно использовать Qt SDK, вам нужно использовать QVector вместо массивов C++ или std-массивов. Вы можете использовать QVector в качестве указателя или нет, это не имеет большого значения, поскольку изнутри он будет распределять память динамически.

Например:

int dx = 5; 

QVector<QPoint> points; 

points.resize(dx + 1); 

Вы также можете сделать:

QVector<QPoint> * points = new QVector<QPoint>(dx + 1); 

В случае, если вы хотите, вектор как указатель. Но Qt использует неявное совместное использование памяти для векторов, поэтому вы можете использовать первый подход в большинстве случаев.

http://doc.qt.io/qt-5/implicit-sharing.html#implicit-data-sharing

+0

Хорошо, поэтому после выполнения: int dx = 5; QVector points; points.resize (dx + 1); Могу ли я просто хранить каждый отдельный QPoint как: point [i] = новый QPoint (1,1); ?? – Ahmad

+0

Да, вы можете это сделать :). Но если вы хотите сохранить указатели, тогда вам нужно объявить QVector как: QVector баллов; – cnebrera

+0

Если вы считаете, что это правильный ответ, пожалуйста, укажите правильный ответ, спасибо! – cnebrera

0

Вы, кажется, делаете что-то, что конкретно указано в стандарте C++, не должно выполняться (динамические массивы) :) В случае Qt то, что вы, скорее всего, захотите сделать, это использовать QList. См. Также документацию Qt об общих контейнерах: http://doc.qt.io/qt-5/containers.html

+4

Динамически выделенные массивы, безусловно, частью стандарта C++. –

+0

Вы думаете о статических массивах с размером, который не компилируется. Как сказал Нил, динамически распределенные массивы могут иметь определенный размер времени выполнения. – zarzych

+1

Вы, конечно, совершенно правы. я должен знать лучше, чем отвечать на такие вопросы, как это происходит в необоснованном состоянии;) – leinir

Смежные вопросы