Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » malloc?!?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]
010
20.12.2003, 14:26 Uhr
Checker




C++:
int loeschen()
        {
        int l;
        int i;
        FILE *fp;
        typedef struct list
                {
                char s[116];
                struct list *last;
                struct list *next;
                }LIST;

        LIST *head = NULL;
        LIST *elem;
        LIST *ptr;

        fp = fopen("bootscr.txt", "r");

        for(i = 1; !feof(fp); i++)
                {
                if (i == 1)
                        {
                        elem = (LIST*) malloc(sizeof(LIST));
                        fgets(elem->s, 115,fp);
                        head->next = elem;


HAbe die if anweisung gelöscht und head auf NULL initialisiert, aber bekomme immer noch den fehler:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt test1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 004014B3. Schreiben von Adresse 00000078'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
20.12.2003, 14:29 Uhr
0xdeadbeef
Gott
(Operator)


Du alloziierst immer noch keinen Speicher für head. Versuch mal das hier:

C++:
LIST *head = (LIST*) malloc(sizeof(LIST));


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
20.12.2003, 14:30 Uhr
Checker



hmm wäre auch nee idee
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
20.12.2003, 15:30 Uhr
Checker




C++:
int loeschen()
        {
        int l;
        int i;
        FILE *fp;
        typedef struct list
                {
                char s[116];
                struct list *last;
                struct list *next;
                }LIST;

        LIST *elem;
        LIST *ptr;
        LIST *head = (LIST*) malloc(sizeof(LIST));

        fp = fopen("bootscr.txt", "r");

        for(i = 1; !feof(fp); i++)
                {
                if (i == 1)
                        {
                        elem = (LIST*) malloc(sizeof(LIST));
                        fgets(elem->s, 115,fp);
                        head->next = elem;
                        head->last =NULL;
                        elem->last = head;
                        elem->next = NULL;
                        ptr = elem;
                        }

                if(i != 1)
                        {
                        elem = (LIST*) malloc(sizeof(LIST));
                        fgets(elem->s, 115,fp);
                        elem->last = ptr;
                        elem->next = NULL;
                        ptr = elem;
                        }
                }
        ausgeben();

        fclose(fp);

        printf("Welchen eintrag möchten sie löschen?\n");
        fflush(stdin);
        l = getch();

        ptr = head;
        for(i = 0; i < l; i++)
                {
                ptr = ptr->next;
                }


habe wieder das selbe prob diesmal in der ziele ptr = ptr -> next;
habe mir eine paar skripte von meinem ehemaligen prof angeschaut und er macht es ganau so.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
20.12.2003, 15:38 Uhr
0xdeadbeef
Gott
(Operator)


l beinhaltet den ASCII-Code des Zeichens, das du eingegeben hast. Wenn du z.B. 5 drückst, hat l den Wert 53. Machs so:

C++:
l = getch() - '0';


oder noch besser:

C++:
scanf("%d", &l);


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
20.12.2003, 15:43 Uhr
Checker



will kein scanf, weil ich die eingabe nichtr mit retrun bestätigen will, aber das andere ist eine gute idee
Dieser Post wurde am 20.12.2003 um 15:44 Uhr von Checker editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
20.12.2003, 15:45 Uhr
Checker



Hmm also habe das jetzt geändert und bekomme immernoch den selben fehler
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
20.12.2003, 16:05 Uhr
0xdeadbeef
Gott
(Operator)


Ach ja, klar. Du verkettest die Liste nicht richtig. Hier:

C++:
if(i != 1)
                        {
                        elem = (LIST*) malloc(sizeof(LIST));
                        fgets(elem->s, 115,fp);
                        elem->last = ptr;
                        elem->next = NULL;
                        ptr = elem;
                        }


setzt du zwar den last-pointer von elem, aber nicht den next-pointer von ptr. Bevor du ptr auf elem setzt, solltest du ptr->next auf elem setzen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
20.12.2003, 18:14 Uhr
Pablo
Supertux
(Operator)


Mich wundert es, dass du die Struct innerhalb von der loeschen Funktion deklarierst. Wieso? Ich würde sagen, dass du die struct nicht von anderen Funktionen benutzen kannst.

Vergiss nicht den Speicher mit free wieder freizugeben.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
20.12.2003, 19:56 Uhr
Checker



Ja ich habe das mit der doppelt verketteten liste zu spät eingeführt, d.h. ich hatte alles fertig und dachte mir, das ich noch eine löschen funktion machen könnte diese aber eigentlich nur mit Listen zu machen sei, und ich hatte keine lust den rest nochmal zumachen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: