Jeg har arbejdet på et lille program der bruger en linked list til at gemme noget user input. Jeg har brugt new og delete til at allokere hukkomelse til mine nodes. Jeg har et loop der allokerer en node af gangen indtil det ønskede antal er opnået, på den måde kan jeg også sørge for at mine nodes "hænger sammen" og at den sidste node peger på NULL.
Problemet er bare hvis programmet får besked på af brugeren til at lave en meget lang liste, 10000 nodes f.eks. Istedet for at smide en overflow exception, begynder mit program bare at oprette nodes en af gangen, fordi at jeg jo ikke allokerer dem samtidigt, og der kommer ikke nogen overflow error før grænsen er nået, altså hvis mit system kan håndtere 9000 nodes, og programmet forsøger at oprette 9200 nodes, opdager mit program det ikke før der alleredde er blevet oprettet 9000 nodes. Det tager meget lang tid og gør systemet ret ustabilt.
Det er egentlig ikke noget problem for det er ikke et program jeg skal distribuere til andre end mig selv og der er aldrig nogen der får brug for at oprette så mange nodes, men det er jo stadig rart at vide hvad man skal gøre i sådan en situation, så jeg kunne sådan set ret godt tænke mig at finde en løsning.
Her er koden til det struct jeg bruger til mine nodes, samt det loop der opretter listen.
/* Node struct */
struct Node {
int x; /* Integer to hold value of the node */
Node *next; /* Pointer to next node */
};
/* Traverse through the list and create new nodes according to user input */
for(i; i < n; i++)
{
/* Go to the end of the list */
while(conductor->next != NULL)
{
conductor = conductor->next;
}
/* Allocate a new node at end of list */
conductor->next = new(std::nothrow) Node;
/* Check for memory overflow */
if(!conductor->next)
{
std::cerr << "Memory overflow error." << std::endl;
exit(1);
}
/* Set the conductor to point to the new node */
conductor = conductor->next;
/* Set the new node's 'next' pointer to NULL, indicating end of list */
conductor->next = NULL;
}
n er antallet af nodes der skal oprettes, conductor er den pointer jeg bruger til at traverse min liste, og i er bare min index variabel.
Hvordan kan jeg ændre min kode så hele listen bliver oprettet med en enkelt "new"? Jeg skal jo stadig have listen "sat sammen", og jeg er ikke helt sikker på hvordan jeg skal gøre?
Tak for hjælpen