Почему при запсуке программы ошибки иполнения ?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct nameval nameval;
struct nameval {
char *name;
int value;
nameval *next;
};
// init
nameval *newitem(char *name, int value) {
nameval *newp;
newp = (nameval *) malloc (sizeof(nameval));
newp->name = name;
newp->value = value;
newp->next = NULL;
return newp;
}
//add new elem tofirst
nameval *addfront (nameval *listp, nameval *newp) {
newp->next=listp;
return newp;
}
//add new elem to end
nameval *addend (nameval *listp, nameval *newp) {
nameval *p;
if (listp == NULL) return newp;
for (p=listp; p->next != NULL; p= p->next)
;
p-> next = newp;
return listp;
}
// search elem
nameval *searchelem (nameval *listp, char *name) {
for (; listp != NULL; listp = listp->next) {
if (strcmp(name,listp->name) ==0)
return listp;
}
return NULL;
}
// free mem
void freeall (nameval *listp) {
nameval *next;
for (; listp != NULL; listp = next) {
next = listp->next;
free(listp);
}
}
//delete elem
nameval *delitem (nameval *listp, char *name) {
nameval *p, *prev;
prev = NULL;
for (p = listp; p != NULL; p = p->next) {
if (strcmp(name, p->name) == 0 ) {
if (prev == NULL)
listp = p->next;
else
prev->next = p->next;
free(p);
return listp;
}
prev=p;
}
// not in list
return NULL;
}
//
int printlist (nameval *listp) {
for (; listp != NULL; listp = listp->next) {
//printf(listp->name);
}
return 0;
}
int main (){
char *s=(char*)malloc (255 *sizeof(char));
nameval *list;
scanf ("%s",s);
//printf(s);
//list = newitem("sdfsdf",0x263A);
//list = addfront(list,newitem("sdfsdf",0x263A));
list = addfront(list,newitem(s,0));
list = addfront(list,newitem(s,0));
// list = addfront(list,newitem(s,0));
//printlist(list);
freeall(list);
}
?
Особо замечу, что все процедуры я взял из книги "Практика программирования" (Брайн Керниган и Роб Пайк).
Разве подобное можно встретить в Паскале ?