F
Hmm ich habe das ganze mal versucht, selber zu programmieren, aber schon beim zurückgeben des Zeigers auf das erste Element schmiert er ab. Ich denke ich habe da irgendeinen nicht richtig initialisierten Pointer, aber ich habe zur Zeit kein Debugger und finde den Fehler nicht:
#ifndef HEADER_H
#define HEADER_H
typedef struct
{
void* pPrev;
void* pData;
void* pNext;
}Item;
typedef struct
{
Item* pStart;
Item* pLast;
int nItems;
}List;
#endif
#include <stdio.h>
#include "list.h"
void createList (List*); /* legt neue liste an */
int append (List*,void*); /* fügt einen Eintrag ein */
int listsize (List*); /* errechnet Listengröße */
void* getFirst (List*); /* gibt Zeiger auf 1. Element zurück */
void createList (pList)
List* pList;
{
if (pList == (List*)NULL)
return;
pList = (List*)malloc (sizeof (List));
if (pList)
{
pList->pStart = (Item*)NULL;
pList->pLast = (Item*)NULL;
pList->nItems = 0;
}
}
int append (list,data)
List* list;
void* data;
{
Item* item = (Item*)NULL;
if (list == (List*)NULL)
return -1;
if (data == (void*)NULL)
return -1;
item = (Item*)malloc (sizeof (Item));
if (item == (Item*)NULL)
{
return -1;
}
else
{
memset (item, 0, sizeof (Item));
item->pData = data;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Fallunterscheidung: Ist noch kein Eintrag in *
* der Liste enthalten, so ist der Zeiger auf *
* die Startposition NULL. Andernfalls zeigt pStart *
* auf das erste Element *
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
if (list->pStart == (Item*)NULL)
{
/* setze Werte in der Liststruktur */
list->pStart = item->pData;
list->pLast = item->pData;
list->nItems = 1;
/* setze Werte für das Node */
item->pPrev = (void*)NULL;
item->pNext = (void*)NULL;
}
else
{
list->nItems++;
item->pPrev = list->pLast->pData;
item->pNext = (void*)NULL;
list->pLast = item->pData;
}
return 0;
}
void* getFirst (list)
List* list;
{
void* pCurrent = (void*)NULL;
if (list == (List*)NULL)
return (void*)NULL;
pCurrent = list->pStart;
if (pCurrent == (void*)NULL)
return (void*)NULL;
else
return pCurrent;
}
int listsize (list)
List* list;
{
if (list == (List*)NULL)
return -1;
else
return list->nItems;
}
int main (argc, argv)
int argc;
char** argv;
{
int pInt [] = {10,20,30,40,50,60,70,80,100,120};
int i = 0;
List mylist;
(void)createList (&mylist);
for (i=0; i< (sizeof (pInt) / sizeof (pInt[0])); ++i)
append (&mylist, (void*)&pInt[i]);
(void)printf ("Anzahl der Elemente %d\n", listsize (&mylist));
(void)printf ("erstes Element ist %d\n", (*(int*)getFirst (&mylist)));
return 0;
}
Kann vielleicht einer mal testen oder mir so sagen was falsch sein könnte? Ach entschuldigt den Style der Funktionen, das ist die alte Schreibweise die wir noch auf der arbeit anwenden. Ich habe es auf der Arbeit angefangen und habe keine Lust es jedesmal umzuschreiben.
Gruß Sebastian