Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 14:59

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



2dimensionale Liste: free()

Discussion on 2dimensionale Liste: free() within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
2dimensionale Liste: free()

Hey,

ich habe zur Zeit eine Aufgabe für die Uni, in der ich eine eigene Shell schreiben muss.

Hab mir das so überlegt, dass ich praktisch eine 2dimensionale verkettete Liste habe.
Benutze dafür folgende structs:
Code:
struct node{
    struct node *next;
    struct node *prev;
    struct argument *nextArg;
    int status;

};

struct argument{
    char *text;
    struct argument *nextArg;
};
Das ganze haben wir uns so gedacht, dass die Befehle in der node-Liste gespeichert werden (bislang sind nur built-in Funktionen wie "exit", "kill", "cd", "echo" etc implementiert) und die jeweiligen Argumente dazu in der argument-Liste.

Das ganze klappt auch ganz gut bis auf das freigeben des Speichers.
Ich hatte es erst so versucht:
Code:
void freeList(struct node *root){
    struct node *tmp = root;
        while ((tmp = tmp->next) != NULL) {
            struct argument *tmpArg = tmp->nextArg;
            struct argument *delArg = tmpArg;
            while (tmpArg != NULL) {
                tmpArg = tmpArg->nextArg;
                free(delArg);
                delArg=tmpArg;
            }
            free(root);
            root=tmp;
        }
}
Die "next" Pointer werden mit NULL initialisiert also besteht kein Risiko, dass die irgendwo in den Speicher zeigen und somit die Schleife nicht durchläuft oder so.

Allerdings klappt die Funktion nicht so ganz. Nach ein paar Befehlen in meiner Shell kommt dann irgendwann ein Speicherzugriffsfehler. Scheint ziemlich Random zu sein. Konnte zmdst keine Regelmäßigkeit erkennen.

Vllt kann mir jemand helfen, wie man so eine "2D Liste" gut "freen" kann.

Grüße
Belur is offline  
Old 04/17/2015, 19:06   #2

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
Ich weiß nicht, ob ich es gerade einfach verpeile, aber warum nicht so simpel?

Code:
void free_arg(struct argument *arg)
{
	while (arg != NULL)
	{
		struct argument *tmp = arg;
		arg = arg->next;
		free(tmp);
	}	
}

void free_node(struct node *root)
{
	while (root != NULL)
	{
		free_arg(root->nextArg);
		
		struct node *tmp = root;
		root = root->next;
		free(tmp);
	}
}
Du musst rein von der Logik her halt durch die Liste, für jeden Eintrag erst nextArg behandeln, dann root in eine zweite Variable abspeichern und root neu zuweisen, danach die zweite Variable mit free() verwenden.
snow is offline  
Thanks
1 User
Old 04/18/2015, 12:05   #3
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Hey, scheint einwandfrei zu funktionieren.
Dankeschön
Belur is offline  
Reply


Similar Threads Similar Threads
Autobuyer Liste 1. Day free
10/29/2013 - Fifa Trading - 0 Replies
Colse
Suche Free Proxy Liste
07/31/2012 - Off Topic - 6 Replies
Hey, da meine Proxy Liste anscheinend veraltet ist und fast kein Proxy mehr geht suche ich eine neue Liste. Google wurde ich nicht fündig die Proxy Listen gingen entweder nicht oder man musste bezahlen :D Falls wer eine Liste hat, währe Nett wenn er sie hochlädt oder den Link hierrunter postet. Ich bedanke mich schonmal im Vorraus.
Free Ego-Shooter Liste
09/24/2011 - General Gaming Discussion - 90 Replies
### Free Ego-Shooter ### Operation 7 Download Register http://www.winsoftware.de/screenshots/big/operati on7.jpg Portal: Prelude Download http://www.winsoftware.de/screenshots/big/portalp reludewin.jpg
Free Redirectoren – Subdomains Liste
05/24/2011 - Main - 1 Replies
Hier mal ne Liste verschiedenster Anbieter von Free Subdomains & Redirectoren elite.to | redirector | yourname.elite.to or elite.to/yourname and many more... kickfree, adfree, gute Optionen, coole Domains CS-Arena.com - professionelles Game-, Rootserver- & Housingbusiness name.xs.am, sehr viele gute Features, werbefrei & kickfree x.gg - domain registration hosting xtrem kurze Subdomain: name.x.gg, URL-Cloaking, PathForwarding, FrameKiller, werbefrei Unknown Webspace viele gute...



All times are GMT +2. The time now is 14:59.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.