2010-06-14 177 views
2

我有在Qt的SDK中的數組中的動態C++內存分配的一些問題......下面是我做的:如何在Qt C++中爲數組動態分配內存?

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

然而,當我嘗試調試代碼,程序只是崩潰當它試圖執行第三行....任何線索?

+0

它不應該在你的代碼的其他地方墜毀指向一個問題 – 2010-06-14 13:57:43

回答

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] = new QPoint(1,1); ?? – Ahmad 2010-06-14 10:41:57

+0

是的,你可以做到這一點:)。但是如果你想存儲指針,那麼你必須聲明QVector,如:QVector points; – cnebrera 2010-06-14 10:55:45

+0

如果您認爲這是正確的答案,請設置爲正確的答案,謝謝! – cnebrera 2010-06-14 10:56:45

0

你似乎在做一些在C++標準中特別聲明的東西,不應該這樣做(動態數組)。在Qt的情況下,你可能想要做的就是使用QList。另請參閱關於通用容器的Qt文檔:http://doc.qt.io/qt-5/containers.html

+4

動態分配數組是肯定的C++標準的一部分。 – 2010-06-14 10:12:23

+0

您正在考慮靜態數組,其大小不是編譯時可計算的。正如尼爾所說,動態分配的數組可以具有運行時確定的大小。 – zarzych 2010-06-14 11:09:24

+1

你當然完全正確。我應該知道比在沒有咖啡因的狀態下回答這樣的問題更好:) – leinir 2010-06-14 12:05:26