2010-06-14 5 views
2

Je vais avoir quelques problèmes dans l'allocation de mémoire pour un tableau dynamique en C++ au sein de Qt SDK ... Voici je fais:Comment allouer dynamiquement de la mémoire pour des tableaux dans Qt C++?

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

Cependant lorsque je tente de déboguer le code, les programmes s'écrase tout quand il essaie d'exécuter la troisième ligne .... des indices?

+0

Il ne faut pas planter ce point à un problème ailleurs dans votre code –

Répondre

5

Si vous souhaitez utiliser Qt SDK correctement, vous devez utiliser QVector au lieu des baies C++ ou des tableaux std. Vous pouvez utiliser QVector comme un pointeur ou non, cela n'a pas vraiment d'importance car, en interne, il va allouer dynamiquement la mémoire.

Par exemple:

int dx = 5; 

QVector<QPoint> points; 

points.resize(dx + 1); 

Vous pouvez également faire:

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

Si vous voulez le vecteur comme un pointeur. Mais Qt utilise le partage de mémoire implicite pour les vecteurs afin que vous puissiez utiliser la première approche la plupart du temps.

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

+0

D'accord, donc après avoir fait: int dx = 5; QPoints de pointage; points.resize (dx + 1); Puis-je simplement stocker chaque QPoint comme suit: point [i] = nouveau QPoint (1,1); ?? – Ahmad

+0

Oui, vous pouvez le faire :). Mais si vous voulez stocker des pointeurs, vous devez déclarer le QVector comme: QVector points; – cnebrera

+0

Si vous pensez que c'est la bonne réponse s'il vous plaît définir est la bonne réponse, merci! – cnebrera

0

Vous semblez faire quelque chose qui est spécifiquement indiqué dans le standard C++ n'est pas censé être fait (tableaux dynamiques) :) Dans le cas de Qt, ce que vous voulez probablement faire est d'utiliser un QList. Voir aussi la documentation de Qt sur les conteneurs génériques: http://doc.qt.io/qt-5/containers.html

+4

tableaux attribués sont certainement Dynamiquement partie de la norme C++. –

+0

Vous pensez à des tableaux statiques avec une taille qui n'est pas compilable. Comme Neil l'a dit, les tableaux alloués dynamiquement peuvent avoir une taille déterminée à l'exécution. – zarzych

+1

Vous êtes bien sûr tout à fait correct. je devrais savoir mieux que de répondre aux questions comme ceci dans un état uncaffeinated;) – leinir

Questions connexes