Anonymní profil -stco – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil -stco – Programujte.comAnonymní profil -stco – Programujte.com

 

Příspěvky odeslané z IP adresy 2001:718:2:31:4847:f017:d...–

-stco
C / C++ › Pole pointerů na struktury
28. 3. 2013   #174047

Ahoj, potřeboval bych poradit jak vytvořit pole pointerů na struktury. Pole samotných struktur mi asi nevyhovuje kvůli časové náročnosti na kopírování obsahu pole při zvětšování (kopírování celých struktur oproti kopírování pointerů). Pole musím být schopný i zvětšit (zatím se mi nepodařilo zvětšení bez memory leaku). Nesmím použít vector ani list (STL). Snad jsem to sepsal dost srozumitelně

Dejme tomu, že mám strukturu:

struct S {
  string a;
  string b;
};

Pole ukazatelů vytvořím takto?

S ** polePointeru = new S*[velikost];
for(int i = 0; i < velikost; i++) {
  polePointeru[i] = new S;
}

Zápis?

for(int i = 0; i < velikost; i++) {
  polePointeru[i]->a = "a";
  polePointeru[i]->b = "b";
}

Výpis?

for(int i = 0; i < velikost; i++) {
  cout << polePointeru[i]->a << ' ' << polePointeru[i]->b << endl;
}

Uvolnění paměti (to nedělám před zvětšováním pole, jen ukázka jestli nedělám něco špatně):

for (int i = 0; i < velikost; i++) {
  delete polePointeru[i];
}
delete[] polePointeru;

Špatné zvětšování pole:

S ** tmp = new S*[zvetsenaVelikost];  // nove vetsi pole
for(int i = 0; i < zvetsenaVelikost; ++i) {
  tmp[i] = new S;
}

for (int i = 0; i < velikost; i++) { // kopirovani pointeru do vetsiho pole
  tmp[i] = polePointeru[i];
}

polePointeru = tmp; // timhle zrejme zpusobim memory leak

Jak správně zvětšit to pole a uvolnit paměť?

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý