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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2014, 22:08   #1
Vladislavv
Пользователь
 
Регистрация: 30.07.2014
Сообщений: 35
По умолчанию Удаление динамического массива с сохранением его значений

как в функции add удалить дин массив ptzz но при этом оставить его значения в ptz?
Код:
#include <iostream>
#include <ctime>
using namespace std;

template <typename T>
void menu(T ptz, int &n);
template <typename T>
void create (T &ptz, int &n);
template <typename T>
void fill (T ptz, int n);
template <typename T>
void out (T ptz, int n);
template <typename T>
void add (T *&ptz, int &n);
template <typename T>
void del (T *& ptz, int &n);

void main(){
int size=0;
int *mas=NULL;
menu (mas, size);
}

template <typename T>
void menu(T ptz, int &n){
cout <<"work with a dynamic one-dimensional array\n";
cout <<"creating an array\n";
create (ptz, n);
cout <<"filling an array\n";
fill (ptz, n);
cout <<"output of array\n";
out (ptz, n);
bool ch=1;
int chs=0;
do{
	cout <<"which operation do you want to make?\n\n";
	cout <<"1)adding of the element\n";
	cout <<"2)deleting of the element\n";
	cout <<"3)searching of the element\n";
	cin >>chs;
	switch (chs){
		case 1:
		add (ptz, n);
		out (ptz, n);
		break;
		case 2:
		del (ptz, n);
		out (ptz, n);
		break;
		case 3:
		srch (ptz, n);
		break;
	}
}
while(ch=1);
}

template <typename T>
void create (T &ptz, int &n){
	do{
	cout <<"input size of array\n";
	cin >>n;
	ptz= new int [n];
	}
	while (n<=0);
}

template <typename T>
void fill (T ptz, int n){
	for (int i=0; i<n; i++){
	cout <<"input "<<i+1<<" element\n";
		cin >>ptz[i];
	}
}

template <typename T>
void out (T ptz, int n){
for (int i=0; i<n; i++){
	cout <<i+1<<" element is "<<ptz[i]<<endl;
	}
}

template <typename T>
void add (T *&ptz, int &n){
int p=0, f=0;
cout <<"input figure\n";
cin >>f;
cout <<"input position of your figure\n";
cin >>p;
T *ptzz=new T [p];
if (p>n){
	for (int i=0; i<p; i++){
		if (i<n)
	ptzz[i]=ptz[i];
		else
			(i+1==p)?ptzz[i]=f:ptzz[i]=0;
	}
	ptz=ptzz;
		n=p;	
}
else
	ptz[p-1]=f;

ptz=ptzz;
}


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 20.09.2014 в 12:25.
Vladislavv вне форума Ответить с цитированием
Старый 20.09.2014, 21:39   #2
tolikpoltana
Новичок
Джуниор
 
Регистрация: 30.05.2014
Сообщений: 1
По умолчанию

вот после
Код:
ptz=ptzz;
освободите память - да и все
Код:
delete [] ptzz
вы ведь сохранили адрес этого участка памяти в указателе ptz

Данные не удалятся.
Просто этот ptzz уже не будет ссылаться на память, где эти данные хранятся.

Указатели и динамическое выделение памяти

Последний раз редактировалось tolikpoltana; 20.09.2014 в 21:42.
tolikpoltana вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элемента динамического массива mrCloud Общие вопросы Delphi 7 03.11.2012 12:31
Удаление строки из двумерного динамического массива hidraulik Общие вопросы C/C++ 0 08.12.2009 10:48
Удаление динамического массива Сергей089 Общие вопросы C/C++ 3 08.03.2009 13:13
Удаление элементов из динамического массива dashulka Общие вопросы Delphi 4 31.10.2008 14:03
Удаление элемента динамического массива Dogmat Помощь студентам 6 13.07.2008 14:33