IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Списки. Ошибка при работе с памятью., Си
Altair
сообщение 3.06.2006 23:15
Сообщение #1


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


пишу процедуры для работы со списками (по Кернигану)
Почему при запсуке программы ошибки иполнения ?
#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;
}

//

// print

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);
	
	
	
}

	

?

Особо замечу, что все процедуры я взял из книги "Практика программирования" (Брайн Керниган и Роб Пайк).

Разве подобное можно встретить в Паскале ? wacko.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 24.07.2025 16:52
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"