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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2011, 21:20   #1
hak555
 
Регистрация: 30.09.2011
Сообщений: 4
По умолчанию Списки (Си). Проблема с динамической памятью.

Здравствуйте!
Есть задание: Реализовать двусвязный список и обеспечить заполнение его данными и его сортировку по одному из полей входящих в него структур.

Вот, что я написал:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>

typedef struct _LIST_ENTRY *PLIST_ENTRY;
typedef struct _LIST_ENTRY
{
	int nomer,ball;
	PLIST_ENTRY Next; 
	PLIST_ENTRY Prev;
} 
LIST_ENTRY, *PLIST_ENTRY;


int main()
	{
		while(1)
				{
					PLIST_ENTRY pl=0,plh=0,plp=0;
					int n,i,j,c,k;
					printf ("Vvedite kolichestvo zapisej: ");
					scanf("%d",&n);
					
					for(i=0;i<n;i++)
					{
							pl = (PLIST_ENTRY)malloc(sizeof(LIST_ENTRY));
							printf("Vvedite nomer: ", i+1);
							scanf("%d",&pl->nomer);
							printf("Vvedite ball: ");
							scanf("%d",&pl->ball);
							pl->Next=plh;
							plh = pl;
							pl->Prev=plp;
							plp=pl;
						}

					for (i=0; i<n;i++)
					{
						for(j=0; j<n-i;j++)
							{
								if (pl->ball < pl->Next->ball)
									{
										c=pl->nomer;
										pl->nomer=pl->Next->nomer;
										pl->Next->nomer=c;

										c=pl->ball;
										pl->ball=pl->Next->ball;
										pl->Next->ball=c;
									}

								pl=plh;
								for (k=0; k<j; k++)
									pl=pl->Next;
							}

						pl=plh;
						for (j=0; j<i; j++)
							pl=pl->Next;
					}

					printf("\nSortirovka po BALLam \n");
					printf("nomer        ball\n");
					
					for(pl=plh;pl!=0;pl=pl->Next)
						printf("%d            %d \n",pl->nomer,pl->ball);

					free(pl);
					getch();
				}
		}

Всё работает более-менее нормально, но есть парочка проблем.
1) Как сделать так, чтобы при вводе символов, отличных от чисел (введены могут быть только числа), программа выдавала ошибку?
2) Подозреваю, что не очень правильно разобрался с динамической памятью, и по причине этого при задании очень большого кол-ва записей (например 111(1)...) программа выдаёт пустую таблицу и предлагает ввести кол-во снова. Как это исправить?
3) При вводе "1" появляется ошибка: Необработанное исключение в "0x01181533" в "4laba.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000004". В чём проблема?


Заранее спасибо за любую помощь!
hak555 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в работе с динамической памятью thrashkid Общие вопросы C/C++ 8 30.06.2011 00:48
Работа с ListBox и Edit и динамической памятью Serebah Помощь студентам 5 19.11.2010 13:41
Проблема с памятью в С++ rJIaBkoM Помощь студентам 1 14.06.2008 14:25
Помогите пожалуйста с динамической памятью и указателями Riddick2013 Помощь студентам 1 19.12.2007 14:41