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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2017, 00:49   #1
Goolki1
 
Регистрация: 03.04.2017
Сообщений: 3
По умолчанию Дин.массив в дин.списке

У меня есть программа, которая формирует динамический односвязный список с динамическими массивами. т.е грубо говоря у менять файл с порядковым элементом , количеством элементов в дин. массивах и сами элементы дин. массива. Соответственно по ним я формирую односвязный список. Т.е
1 4 ( порядковый и кол-во элементов )
4 7
5 5
6 5
7 9

2 3
4 2
1 1
3 3
Код:
#include <iostream>
#include <fstream>
using namespace std;


struct Nhead
{
	int kk1;
	int kk2;
	int *el;
	int *k;
	Nhead *next;

};

Nhead *Insert(Nhead *begin)
{
	ifstream n("1.txt");
	Nhead *add = new Nhead;
	while (!n.eof())
	{
		n >> add->kk1 >> add->kk2;
		add->el = new int(add->kk2);
		add->k = new int(add->kk2);
		for (int i = 0; i < add->kk2; i++)
		{
			n >> add->el[i];
			n >> add->k[i];
		}
		add->next = begin;
		begin = add;
	}
	return begin;
	n.close();
}
void Show(Nhead *begin)
{
	Nhead *S = begin;
	while (S != NULL)
	{
		cout << S->kk1 << " " << S->kk2 << endl;
		for (int i = 0; S->kk2; i++)
		{
			cout << S->el[i] << " " << S->k[i] << endl;


		}
		S = S->next;
	}
}



int main(void)
{

	setlocale(LC_ALL, "Rus");
	Nhead *begin = NULL;

	begin = Insert(begin);
	Show(begin);

	system("pause");
}


У меня возникает проблема с динамическими массивами в списке , без них он работает . Возможно ,глупый вопрос и скорее всего есть утечка памяти ,но не могу понять.
Goolki1 вне форума Ответить с цитированием
Старый 09.07.2017, 02:25   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Между new int(5) и new int[5] большая разница...
p51x вне форума Ответить с цитированием
Старый 09.07.2017, 09:52   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 734
По умолчанию

Цитата:
Сообщение от Goolki1 Посмотреть сообщение
1 4(порядковый и кол-во элементов )
4 7
5 5
6 5
7 9
- составляйте, пожалуйста, задание почетче и попонятнее. А где 2, 3 и 4 элементы? А-то читаю задание - вообще ничего не понятно.

Цитата:
Сообщение от Goolki1 Посмотреть сообщение
Код:
add->el = new int[add->kk2];
add->k = new int[add->kk2];
- а зачем 2 одинаковых массива заводить?
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.

Последний раз редактировалось Cuprum5; 09.07.2017 в 10:33.
Cuprum5 вне форума Ответить с цитированием
Старый 09.07.2017, 10:09   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
- а зачем 2 одинаковых массива заводить?
а где вы нашли такой код?
p51x вне форума Ответить с цитированием
Старый 09.07.2017, 10:32   #5
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 734
По умолчанию

Ну там у него в коде, я только круглые кавычки заменил на квадратные согласно Вашим замечаниям.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 09.07.2017, 10:34   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Ну раз пошла такая пляска - делать за ТС, отвечу вам - структура данных такая.
p51x вне форума Ответить с цитированием
Старый 09.07.2017, 10:59   #7
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 734
По умолчанию

Какая структура данных у него, я вообще не понял.
Цитата:
Сообщение от Goolki1 Посмотреть сообщение
1 4(порядковый и кол-во элементов )
4 7
5 5
6 5
7 9
- а где тогда порядковые номера 2, 3 и 4 в его коде? Я не думаю, что их можно пропускать.
А, кажется я начал понимать. А зачем ему 2 столбец в одном блоке(массиве)?
А, там типа 2 массива в 1 блоке. Теперь вроде понятно, более-менее. Ну что я могу сказать: автор явно не умеет объяснять материал.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.

Последний раз редактировалось Cuprum5; 09.07.2017 в 11:11.
Cuprum5 вне форума Ответить с цитированием
Старый 09.07.2017, 15:02   #8
Goolki1
 
Регистрация: 03.04.2017
Сообщений: 3
По умолчанию

Да,видимо я плохо объяснил ,но вроде разобрался
Goolki1 вне форума Ответить с цитированием
Старый 09.07.2017, 15:04   #9
Goolki1
 
Регистрация: 03.04.2017
Сообщений: 3
По умолчанию

Спасибо , вроде заработала ,постараюсь изучить поподробнее про выделение дин. памяти
Goolki1 вне форума Ответить с цитированием
Старый 09.07.2017, 15:38   #10
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 734
По умолчанию

Код:
//---------------------------------------------------------------------------
#include <vcl>
#include <iostream>
#include <conio>
#include <fstream>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;

class ds
{
public:
    int kk1, kk2;
    int *el;
    int *k;
    ds *next;
    ds(void)
    {
        next = NULL;
    };
} Head;
//************************************
void Fill(void)
{
    int n;
    ds *dvo = &Head;

    ifstream f("Input.txt");
    while(!f.eof())
    {
	f >> dvo->kk1 >> dvo->kk2;
	dvo->el = new int[dvo->kk2];
	dvo->k = new int[dvo->kk2];

	for(n = 0; n < dvo->kk2; n++)
	{
	    f >> dvo->el[n];
	    f >> dvo->k[n];
	}
        if(!f.eof())
        {
            dvo->next = new ds();
            dvo = dvo->next;
        }
    }
    f.close();
}
//************************************
void View(void)
{
int n = 1, p;
ds *dvo = &Head;

while(dvo)
{
    cout << "Uzel " << n << ":\n";
    cout << "Poryadkovii nomer:" << dvo->kk1 << "\n";
    cout << "Chislo elementov massiva:" << dvo->kk2 << "\n";
    for(p = 0; p < dvo->kk2; p++)
        cout << dvo->el[p] << " ";
    cout << "\n";
    for(p = 0; p < dvo->kk2; p++)
        cout << dvo->k[p] << " ";
    cout << "\n\n";

    dvo = dvo->next;
    n++;
}
}
//************************************
void Destructor(void)
{
ds *dvo = &Head;
while(dvo)
{
    delete[] dvo->el;
    delete[] dvo->k;

    dvo = dvo->next;
}
}
//************************************
int main(int argc, char* argv[])
{
Fill();
View();
Destructor();

getch();
return 0;
}
//---------------------------------------------------------------------------
Неплохо бы еще всю эту цепочку узлов удалить в функции Destructor, кроме Head. Щас напишу.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рассортировать в дин.списке элементы и уравнять их кол-во. Fores Помощь студентам 2 05.05.2014 16:34
Дин. массив (Delphi) MaxRegN Помощь студентам 1 01.03.2013 10:11
Файлы и дин. переменные. Изменить с использованием дин. переменных. Маленыч Паскаль, Turbo Pascal, PascalABC.NET 4 07.06.2012 11:17
из дин. дека в дин. стек (Borland С++) mego4el Помощь студентам 1 07.07.2011 14:41
Трехмерный дин. массив revanatar Общие вопросы C/C++ 3 29.11.2010 22:02