Qt: QVector hulye mukodese...

 ( doc | 2013. március 22., péntek - 16:03 )

   1 #include    
   2 #include    
   3 
   4 int main()
-  5 {
|  6     QVector d;
|  7     d[0] = "x";
|  8     return 0;
|  9 }

ez segfaultol...

QVector d(10); -re modositva tokeletesen mukodik
QVector d; -vel (es az ertekadast atirva) szinten

ez mi a hoher? :S
bugosan van megirva a QVector default constructora, vagy mi?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ez teljesen szabalyosan mukodik.

A QVector d; csinal neked egy ures vektort, aminek az elso elemet hivatkozod meg.
Amit irni akartal, az valami ilyesmi:
d.append( "x" );
d.push_back( "x" );
d << "x";

Ezek barmelyike jo arra, hogy bovitsd egy elemmel a vektort.


"If you must mount the gallows, give a jest to the crowd, a coin to the hangman, and make the drop with a smile on your lips" The Wheel of Time series

+1

Meg is mondom miert:

QVector vec;
vec[fucking_big_number] = 42;

Vagy még ez:

d.insert(d.size(),"x");

A push_back() az STL kompatibilitás miatt van, ekvivalens az append() metódussal (a Qt 5.0 dokumentációból puskáztam). Hogy a kisebb és nagyobb jelet ne nyelje el a Drupal, lásd formázási tippek.

ah, jogos
nagyon pentek van mar :D
valamiert nagyon abban a hitben voltam hogy a reserve() letre is hozza a szukseges elemeket, de ugy tunik nem...

Mintha php-t olvasnék :)

A többiek már elmagyarázták, engem inkább az érdekelne, hogy miért az az első feltételezésed egy elterjedt, népszerű, rengeteg ember által használt libről, hogy hibás, és nem te rontottál el valamit? Ráadásul jól dokumentált, tehát akár el is olvashattad volna, hogy mit tesz a default konstruktor (Constructs an empty vector.) és mit tesz a [] operátor:

Returns the item at index position i as a modifiable reference.
i must be a valid index position in the vector (i.e., 0 <= i < size()).

Sommásan, röviden, tl;dr: itt egyedül te vagy hülye, nem a QVector.
----
India delenda est.
Hülye pelikán

bocs, csak most vettem eszre hogy a lenyeget megette a BB kod...

szoval ha QString-es vectort akarok csinalni, akkor a fenti modon mukodik illetve nem mukodik

de ha valami elemi tipust, pl. intet rakok bele, akkor tokeletesen mukodik az elso verzio is

Undefined behavior, szóval akár működhet is, akár kiszámolhatja a pí utolsó számjegyét, de segfaultolhat is.
----
India delenda est.
Hülye pelikán

Nem annyira undefined.
Felulirja a memoriat, akarmi is van ott :)

Ennél undefinedebbet meg nem nagyon tudsz csinálni. :))

--
Debian - The "What?!" starts not!
http://nyizsa.blogspot.com

Úgyérted: megpróbálja felülírni, aztán vagy engedi az oprendszer, vagy nem.
De undefined amúgy, a fordítónak teljes jogában áll indexhatár ellenőrzéseket belerakni a programba, és tetszőleges reakciót produkálni túl- vagy alulcímzés esetén.
----
India delenda est.
Hülye pelikán

Ez igaz, szinte tuti, h. debugban ugat.

Igazából egy core fájlnál nincs jobb ilyen dolgokra :)
----
India delenda est.
Hülye pelikán