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ěť?