Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2011, 14:11   #1
Yakoot
Новичок
Джуниор
 
Регистрация: 17.06.2011
Сообщений: 6
По умолчанию

чот не удаляется.. ошибку выплевывает - память не может быть read
Код:
int del_all()
{
	person *del, *curpos;
	if (head == NULL)
		return 0;
	else
	{
		while (head != NULL)
		{
			if (head->next == head)
				delete head;
			else
			{
				del = head;
				curpos = head->next;
				while (curpos != head)
					curpos = curpos->next;
				head = head->next;
				curpos->next = head;
				delete del;
			}
		}
		
	}
	return 0;
}
хм.. попробую удалять с конца.. тогда голову двигать не придется)

Код:
int del_all()
{
	person *del = head;
	while (head != NULL)
	{
		if (head->next = NULL)
		{
			delete head;
			head = NULL;
			return 0;
		}
		while (del->next->next != head)
		{
			del = del->next;
		}
		delete del->next;
		del->next = head;
		return 0;
	}
	return 0;
}
снова ошибку выдает...(

Последний раз редактировалось Stilet; 17.06.2011 в 15:43.
Yakoot вне форума Ответить с цитированием
Старый 17.06.2011, 14:48   #2
Scaevola
Пользователь
 
Аватар для Scaevola
 
Регистрация: 08.06.2011
Сообщений: 25
По умолчанию

Откуда взялся тип данных person,если это объект,так передавай его через параметры функции, и где ты объявил переменную head.
А лучше вывеси полный код.
Scaevola вне форума Ответить с цитированием
Старый 17.06.2011, 14:51   #3
Yakoot
Новичок
Джуниор
 
Регистрация: 17.06.2011
Сообщений: 6
По умолчанию

полный код:
Код:
#include "stdafx.h"
#pragma warning(disable: 4996)

struct person
{
	char lastname[10];
	char name[10];
	char workplace[50];
	char phone_number[11];
	person *next;
};
person *head = NULL;
int read();
int init_ls();
int display();
int del_all();

int _tmain(int argc, _TCHAR* argv[])
{
	init_ls();
	read();
	char action;
	do
	{
		cout <<"Select an action:" <<endl
			<<"f - Search by lastname" << endl
			<<"p - Search by phone number" << endl
			<<"a - Add struct" << endl
			<<"d - Delete struct " << endl
			<<"s - Show a list " << endl
			<<"c - Clear list " << endl
			<<"e - Exit " << endl;
		action = getch();
		switch (action)
		{
			//case 'f': search_fam(); break;
			//case 'p': search_phone(); break;
			//case 'a': add_struct(); break;
			//case 'd': del_struct(); break;
			case 's': display(); break;
			case 'c': del_all(); break;
		}
	}
	while (action != 'e');
	return 0;
}
int read()
{
	person *curpos, *new_el;
	FILE *file;
	file = fopen("data.txt", "rt");
	if (file == NULL)
		return 0;	
	while(!feof(file))
	{
		new_el = new person;
		fscanf(file, "%s\n", &(new_el->lastname));
		fscanf(file, "%s\n", &(new_el->name));
		fscanf(file, "%s\n", &(new_el->workplace));
		fscanf(file, "%s\n", &(new_el->phone_number));
		if (head == NULL)
		{
			head = new_el;
			head->next = head;
			curpos = head;
		}
		else
		{
			while (curpos->next != head)
				curpos = curpos->next;
			curpos->next = new_el;
			new_el->next = head;
		}
	}
	return 0;
}
int init_ls ()
{
	head = NULL;
	return 0;
}
int display()
{
	person *curpos;
	curpos = head;
	if (head == NULL)
		return 0;
	else
	{
		do
		{
			cout << curpos->lastname << endl
				<< curpos->name << endl
				<< curpos->workplace << endl
				<< curpos->phone_number << endl
				<< endl;
			curpos = curpos->next;
		}
		while (curpos != head);
	}
	return 0;
}
int del_all()
{
	person *del = head;
	while (head != NULL)
	{
		if (head->next = NULL)
		{
			delete head;
			head = NULL;
			return 0;
		}
		else
		{
			while (del->next != head)
			{
				del = del->next;
			}
			delete del->next;
			del->next = head;
			return 0;
		}
	}
	return 0;
}

Последний раз редактировалось Stilet; 17.06.2011 в 15:44.
Yakoot вне форума Ответить с цитированием
Старый 17.06.2011, 15:23   #4
Scaevola
Пользователь
 
Аватар для Scaevola
 
Регистрация: 08.06.2011
Сообщений: 25
По умолчанию

А можешь указать номер ошибки, ее описание и в какой строке она находиться.
Scaevola вне форума Ответить с цитированием
Старый 17.06.2011, 15:51   #5
Yakoot
Новичок
Джуниор
 
Регистрация: 17.06.2011
Сообщений: 6
По умолчанию

при компиляции ошибок нет... выдает "инструкция по адресу ... память не может быть "read""... вроде что то не нравится ему вот тут
PHP код:
while (del->next != head)
            {
                
del del->next;
            } 
Yakoot вне форума Ответить с цитированием
Старый 18.06.2011, 05:11   #6
Yakoot
Новичок
Джуниор
 
Регистрация: 17.06.2011
Сообщений: 6
По умолчанию

ну помогите же кто-нибудь... второй день не знаю как исправить
Yakoot вне форума Ответить с цитированием
Старый 18.06.2011, 09:38   #7
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Код:
int del_all()
{
	person *index = head;
	person *del = NULL;
	while(!index)
	{
		//Если полсдний
		if(index->next == NULL)
		{
			delete index;
			head = NULL;
			return;
		}
		else // Иначе
		{
			del = index; // создаём копию тикущего указателя
			index = index->next; // индекс дальше пробрасываем
			delete del; // удаляем копию
		}
	}
}
типо того.
Guy вне форума Ответить с цитированием
Старый 18.06.2011, 15:39   #8
Yakoot
Новичок
Джуниор
 
Регистрация: 17.06.2011
Сообщений: 6
По умолчанию

хм.. вроде все логично, заменил на твою функцию, ваще ничо не происходит...
Yakoot вне форума Ответить с цитированием
Старый 18.06.2011, 19:39   #9
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Ничего не происходит это не ответ. Поставь breakpoint в эту функцию, пройдись по F8-ми пошагово, может я чего не учёл...

Хотя вроде понел ошибку. Нада "while(index != null)"
Guy вне форума Ответить с цитированием
Старый 18.06.2011, 20:05   #10
Yakoot
Новичок
Джуниор
 
Регистрация: 17.06.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Guy Посмотреть сообщение
Хотя вроде понел ошибку. Нада "while(index != null)"
ну я пытался так сделать... нажимаю очистить список, снова выдает меню, првоеряю список, выдает какието иероглифы непонятные и ошибку насчет памяти...
Yakoot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программная реализация однонаправленного линейного списка Денис Ст Помощь студентам 2 14.01.2014 21:50
Сортировка циклического однонаправленного списока ArtJuhn Помощь студентам 2 24.11.2010 16:18
Реализация однонаправленного шаблонного связанного списка Blade Общие вопросы C/C++ 17 28.03.2009 19:59