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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2013, 23:04   #1
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию Вопрос по стеку

Вот, у меня такая ситуация: создал 2 стека, один для ввода э-тов, а второй для обработки элементов. Когда дело дошло до изменения местами минимума и максимума я пришел в тупик...
Вроде бы поменял их местами, но программа выводит совсем не то... даже не знаю в чем проблема, пробовал работать с указателями - по нулям Укажите на ошибку, тема интересная, так что хотелось бы в ней хорошенько разобраться
Код:
#include <iostream>
#include <stdlib.h>

using namespace std;
int N;
int i=0;
struct List {
	float a;//информационное поле
	List *Next;//указатель на следующий адрес структуры List (адресное поле)
};

List *Head;//указатель на голову(первый элемент списка) стека
List *P;//указатель на текущий элемент
List *Top;
List *Current;
float *pMinimal=0;
float *pMaximal=0;
float maximal, temp;

void main() {

	cout << "Enter N: ";
	cin >> N;
	while (N<=0 || N>100) {
	cout << "Wrong amount. Re-enter: ";
	cin >> N;
    }
	
	Head=NULL;//объявление пустого списка
	//ввод элементов
	for (i=0; i<N; i++) {
	P=(List*)malloc(sizeof(List));//выделение памяти под текущий элемент
	cout << "The " << i+1 << " element: ";
	cin >> P->a;//заполнение информационного поля
	P->Next=Head;//переопределение указателя на следующий элемент
	Head=P;//переопределение указателя на голову
	}

	//блок создания нового вспомогательного стека и поиска минимума/максимума в нем
    Top=NULL;//начальный адрес вершины вспомогательного стека равен 0
	P=Head;
	Current=(List*)malloc(sizeof(List));//выделение памяти под текущий элемент вспомогательного стека
	Current->a=P->a;//заполнение информационного поля вспомогательного списка
	*pMaximal=Current->a;
	*pMinimal=Current->a;
	maximal=Current->a;

	Current->Next=Top;//определение указателя текущего элемента на вершину
	Top=Current;//переопределение указателя на вершину
	P=P->Next;//переопределение указателя на текущий элемент
	while (P!=NULL) {
		Current=(List*)malloc(sizeof(List));
		Current->a=P->a;
		if ((Current->a)>*pMaximal) {
			*pMaximal=Current->a;
			maximal=Current->a;
		}
		else if ((Current->a)<*pMinimal) {
			*pMinimal=Current->a;
		}
		Current->Next=Top;
		Top=Current;
		P=P->Next;
	}

	cout << "temp=maximal: " << temp << "\n";
	*pMaximal=*pMinimal;
	cout << "*pMaximal=*pMinimal: " << *pMaximal << "\n";
	*pMinimal=maximal;

	Current=Top;
	while (Current!=NULL) {
		cout << "The element: " << Current->a << "\n";
		Current=Current->Next;
	}
	
	//блок освобождения памяти для исходного стека
	while (Head!=NULL) 
	{
		P=Head;
		Head=Head->Next;
		free(P);
	}

	//блок освобождения памяти для вспомогательного стека
	while (Top!=NULL) 
	{
		Current=Top;
		Top=Top->Next;
		free(Current);
	}
  
system("pause");
}
Igor95 вне форума Ответить с цитированием
Старый 05.01.2013, 02:00   #2
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

Код:
float *pMinimal=0;
float *pMaximal=0;
//...
*pMaximal=Current->a;
*pMinimal=Current->a;
по-моему вы пытаетесь разыменовать нулевой указатель.
у меня такая штука дает совершенно конкретную ошибку на тему память 0х0000000 не может быть "written"
denrubun вне форума Ответить с цитированием
Старый 05.01.2013, 02:02   #3
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

наверное вы имели ввиду вот это
pMaximal = &(Current->a);
pMinimal = &(Current->a);
denrubun вне форума Ответить с цитированием
Старый 06.01.2013, 21:16   #4
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

да, точно)) как-то я этот момент протупил(((
Igor95 вне форума Ответить с цитированием
Старый 06.01.2013, 23:31   #5
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

работает теперь?
denrubun вне форума Ответить с цитированием
Старый 07.01.2013, 11:34   #6
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

да, все работает, спасибо))
Igor95 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по стеку in_utile Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 08.05.2012 10:30
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
вопрос по стеку C++ Mishka Помощь студентам 2 30.06.2008 20:35
Вопрос по стеку на C++ Go6a Помощь студентам 2 06.04.2008 22:07