Jag har en dynamisk array av min egedefinierad typ INIDATA. Hur gör jag för att lägga till ett 'object' till på arrayen?
Dynamisk array
12 svar · 1 172 visningar · startad av Alpha II
Allokerar mer (nytt) utrymme
Hur? Har försökt på lite olika sätt att göra det men akka försök resulterar i att programmet kraschar.
Ta en titt på funktionen realloc().
Med den kan du allokera mer plats i en array. Dvs. du kan utöka storleken på din array med X antal bytes.
Jag får det inte att fungera!
void INIFILE::SetKey(char *key, char *value)
{
int pos;
if(KeyExist(key,&pos)==true)
{
strcpy(section_data[pos].value, value);
}
else
{
section_keys++;
section_data = (INIDATA*) realloc(section_data, section_keys * sizeof(INIDATA));
strcpy(section_data[section_keys].key,key);
strcpy(section_data[section_keys].value,value);
}
}
Funderar på om det kanske vore smartare att använda sig av en länkadlista? Eller helt enkelt vara lat och använda färdig kod för att läsa och srkiva ini filer...
realloc är en funktion i ett C - lib, så det är bara dumt att blanda in den i C++. Länkad lista är kalas i ditt fall, alternativt allokera nytt med new men det känns onödigt då det redan finns så bra saker i STL :)
Får jag lov att programmera min länkadelist själv?
Nah! Kolla efter 'container' i STL-länken under relaterade länkar. Du kan ju exempelvis använda std::vector istället för list ;)
Så jag inkluderar 'vector' och skapar en vector genom att skriva 'vector<INIDATA> minvector;' ? Kompilatorn gillar inte mitt försök i alla fall ;)
Okej. Har lyckats få det att fungera nu och tror jag har kommit på hur vector fungerar :)
Har gjort om helt i min klass efter att ha insett att det blev alldeles för krångligt att göra som jag hade gjort.
Nu har jag ett nytt problem.
Hur sorterar jag vektorn i bokstavsordning efter 'section'?
struct INIDATA
{
char section[256];
char key[256];
char value[256];
};
Kolla vidare under STLs containers och på 'sort' och 'compare'. Finns nog en del frågor om detta redan på forumet så sök även här.
Oh var lite förvirrad när jag skrev det där. Kom på att jag inte alls behövde sortera någonting. Min ini klass funkar hur bra som helst nu :)
Tar upp den här tråden igen då den handlade om precis det problem jag själv har.
PeW skrev:
realloc är en funktion i ett C - lib, så det är bara dumt att blanda in den i C++. Länkad lista är kalas i ditt fall, alternativt allokera nytt med new men det känns onödigt då det redan finns så bra saker i STL :)
Borde lära mig använda STL. Kan inte så mycket om det där.
Men om jag nu vill allokera nytt med new.
Jag har en array definierad som
user * users = new user[x]
som medlem i min klass.
I en metod vill jag kunna lägga till ett nytt user-objekt i den. Jag har provat (världens fulaste metod?):
//kopiera från users till tillfällig array: user * temp
delete [] users;
users = new user[nystorlek]
//kopiera från temp till users
Detta fungerar inte särskilt bra. Någon som kan ge mig något tips (förutom STL som jag inte kan sätta mig in i nu bara för den här skoluppgiften).