пытался вспомнить как со списками работать и немного запутался уж оч давно это было( подскажите плз в каких местах ошибки в сл коде Код (Text): typedef struct node2 { char *FID; char *TID; char *action; char *path; char *mask; char *date; struct node2 *prev, *next; } *LIST2; /* Инициализация списка, как пустого */ LIST2 init(LIST2 *l) { return *l=NULL; } /* Добавление элемента в голову списка */ LIST2 cons (char *f,char *t,char *a,char *p,char *m,char *d,LIST2 l) { LIST2 n=(LIST2)malloc(sizeof(struct node2)); n->FID=f; n->TID=t; n->action = a; n->path = p; n->mask = m; n->date = d; n->next=l; n->prev=NULL; l->prev=n; return n; } /* Печать списка целых */ void printlist(LIST2 l) { printf("\n"); while (l!=NULL) { printf("%s",l->FID); l=l->next; } } /* Добавление элемента в конец списка */ LIST2 last(char *f,char *t,char *a,char *p,char *m,char *d,LIST2 l) { LIST2 head; if (!l) { l=(LIST2)malloc(sizeof(struct node2)); l->FID=f; l->TID=t; l->action=a; l->path=p; l->mask=m; l->date=d; l->next=NULL; l->prev=NULL; return l; } else { head=l; while (l->next!=NULL) l==l->next; l->next=(LIST2)malloc(sizeof(struct node2)) ; l->next->prev=l; l=l->next; l->FID=f; l->TID=t; l->action=a; l->path=p; l->mask=m; l->date=d; l->next=NULL; return head; } }
подскажите плз в чем тут ошибка?второй малок не отрабатывает Код (Text): LIST2 last(wchar_t *f,wchar_t *t,wchar_t *a,wchar_t *p,wchar_t *m,wchar_t *d,LIST2 l) { LIST2 head; size_t sos1 = sizeof(struct node2); size_t sos = sizeof(struct node2); if (!l) { l=(LIST2)malloc(sos); #ifdef VC80 wcscpy_s(l->FID,sizeof(l->FID),f); wcscpy_s(l->TID,sizeof(l->TID),t); wcscpy_s(l->action,sizeof(l->action),a); wcscpy_s(l->path,sizeof(l->path),p); wcscpy_s(l->mask,sizeof(l->mask),m); wcscpy_s(l->date,sizeof(l->date),d); #else wcscpy(l->FID,f); wcscpy(l->TID,t); wcscpy(l->action,a); wcscpy(l->path,p); wcscpy(l->mask,m); wcscpy(l->date,d); #endif l->next=NULL; l->prev=NULL; return l; } else { head=l; while (l->next!=NULL) l=l->next; l->next=(LIST2)malloc(sos1); //l->next = new struct node2; l->next->prev=l; l=l->next; #ifdef VC80 wcscpy_s(l->FID,sizeof(l->FID),f); wcscpy_s(l->TID,sizeof(l->TID),t); wcscpy_s(l->action,sizeof(l->action),a); wcscpy_s(l->path,sizeof(l->path),p); wcscpy_s(l->mask,sizeof(l->mask),m); wcscpy_s(l->date,sizeof(l->date),d); #else wcscpy(l->FID,f); wcscpy(l->TID,t); wcscpy(l->action,a); wcscpy(l->path,p); wcscpy(l->mask,m); wcscpy(l->date,d); #endif l->next=NULL; return head; } } сама структура Код (Text): typedef struct node2 { wchar_t FID[MAX_LEN]; wchar_t TID[20]; wchar_t action[7]; wchar_t path[_MAX_PATH]; wchar_t mask[MAX_LEN]; wchar_t date[11]; struct node2 *prev; struct node2 *next; } *LIST2;
Енто, если ты не можешь отладить код одно/двух-связного списка это просто клиника... Для начала поубирай переменные sos, sos1, и поменяй typedef так, что б были видны типы/указатели: Код (Text): typedef struct node2 { wchar_t FID[MAX_LEN]; wchar_t TID[20]; wchar_t action[7]; wchar_t path[_MAX_PATH]; wchar_t mask[MAX_LEN]; wchar_t date[11]; struct node2 *prev; struct node2 *next; } node_t; node_t *last() { node_t *head; head = (node_t *)malloc(sizeof(node_t)); head->... Ну а т.к. на дворе 2009 год и у тебя есть С++ компилер, то можно не париться с указателями и сделать так: Код (Text): struct node_t { std::wstring FID, TID, action, path[_MAX_PATH], mask[MAX_LEN]; }; std::list<node_t> g_list; void add() { node_t node; node.path = L"Wide string"; g_list.push_back(node); } void print_head() { for (std::list<node_t>::iterator i = g_list.begin(); i != g_list.end(); ++i) { std::wcout << L"Item: " << i->path << std::endl; } }