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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2015, 18:00   #1
max.sokol
Пользователь
 
Регистрация: 14.12.2015
Сообщений: 14
По умолчанию Помогите разбить код на отдельные функции

Код:
#include <iostream>
#include <cmath>

using namespace std;

int	main()

{
	int i, j, k, n, m;
	cout << "Vvedite razmer matr.(nxm): "; cin >> n >> m; //запрашиваем один параметр, матрица квадратная

	char **matrix;//создание двумерного массива
	matrix = new char*[n];
	for (i = 0; i<n; i++)
		matrix[i] = new char[n];

	for (i = 0; i<n; i++)// заполнение двумерного массива
	
	{
		cout << "Vvedite stroku " << i + 1 << ", " << n << " simvolov: ";
		for (j = 0; j<m; j++) cin >> matrix[i][j];
	}

	char *t = new char[n*m];
	int cnt = 0;
	bool bp;

	for (i = 0; i<n; i++)
		for (j = 0; j<m; j++)
		{
			bp = true;
			for (k = 0; k<cnt; k++)
				if (matrix[i][j] == t[k]) { bp = false; break; }
			if (bp) { t[cnt] = matrix[i][j]; cnt++; }
		}
	cout << "Razlichnye simvoly: " << endl;
	
	for (k = 0; k<cnt; k++)cout << t[k] << ' ';
	
	cout << endl << "Kolichestvo: " << cnt << endl;

	delete[] t;
	
	for (i = 0; i<n; i++)//освобождение памяти
		
	delete[] matrix[i];
	delete matrix;
	
	system("pause");
	return 0;
}

Последний раз редактировалось Stilet; 18.12.2015 в 22:35.
max.sokol вне форума Ответить с цитированием
Старый 18.12.2015, 18:13   #2
taras-proger
Подтвердите свой е-майл
 
Регистрация: 12.11.2014
Сообщений: 470
По умолчанию

А теговать кто будет? Билл?
taras-proger вне форума Ответить с цитированием
Старый 18.12.2015, 18:20   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
#include <iostream>
#include <cmath>

using namespace std;

int i, j, k, n, m;
char **matrix;//создание двумерного массива
char *t = new char[n*m];
int cnt = 0;
bool bp;

void f1(){
 cout << "Vvedite razmer matr.(nxm): "; cin >> n >> m; //запрашиваем один параметр, матрица  
   квадратная
 matrix = new char*[n];
 for (i = 0; i<n; i++) matrix[i] = new char[n];
 for (i = 0; i<n; i++){
   cout << "Vvedite stroku " << i + 1 << ", " << n << " simvolov: ";
   for (j = 0; j<m; j++) cin >> matrix[i][j];
 }
};

void f2(){
 for (i = 0; i<n; i++)
  for (j = 0; j<m; j++){
   bp = true;
   for (k = 0; k<cnt; k++) if (matrix[i][j] == t[k]) { bp = false; break; }
   if (bp) { t[cnt] = matrix[i][j]; cnt++; }
  }
 cout << "Razlichnye simvoly: " << endl;
 for (k = 0; k<cnt; k++)cout << t[k] << ' ';
 cout << endl << "Kolichestvo: " << cnt << endl;
 delete[] t;
};


int main(){

f1(); f2();

for (i = 0; i<n; i++)//освобождение памяти

delete[] matrix[i];
delete matrix;

system("pause");
return 0;
}
Уловил направление?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.12.2015, 21:21   #4
max.sokol
Пользователь
 
Регистрация: 14.12.2015
Сообщений: 14
По умолчанию

выдает crt detected that the application wrote to memory. где-то происходит утечка памяти...
max.sokol вне форума Ответить с цитированием
Старый 18.12.2015, 22:36   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну так проведи код трассировкой и посмотри где )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.12.2015, 20:52   #6
max.sokol
Пользователь
 
Регистрация: 14.12.2015
Сообщений: 14
По умолчанию

что-то я не могу разобраться, где утечка памяти.
max.sokol вне форума Ответить с цитированием
Старый 19.12.2015, 21:08   #7
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Код:
delete [] matrix ; // а не delete matrix
Croessmah вне форума Ответить с цитированием
Старый 19.12.2015, 22:22   #8
max.sokol
Пользователь
 
Регистрация: 14.12.2015
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Код:
delete [] matrix ; // а не delete matrix
Не помогает...
max.sokol вне форума Ответить с цитированием
Старый 19.12.2015, 22:58   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Напиши так:
Код:
void f2(){
char *t = new char[n*m];
...
Тут остальной код.
Т.е. переменку t локализуй в функцию. Понял идею?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.01.2016, 15:07   #10
max.sokol
Пользователь
 
Регистрация: 14.12.2015
Сообщений: 14
По умолчанию

Код:
#include <iostream>
#include <cmath>

using namespace std;

int i, j, k, n, m;
char **matrix;//создание двумерного массива
int cnt = 0;
bool bp;

void function1() 
{
	cout << "Vvedite razmer matr.(nxm): "; cin >> n >> m; //запрашиваем один параметр, матрица квадратная
		matrix = new char*[n];
	for (i = 0; i<n; i++) matrix[i] = new char[n];
	for (i = 0; i<n; i++) 
	{
		cout << "Vvedite stroku " << i + 1 << ", " << n << " simvolov: ";
		for (j = 0; j<m; j++) cin >> matrix[i][j];
	}
};

void function2() 
{
	char *t = new char[n*m];
	for (i = 0; i<n; i++)
		for (j = 0; j<m; j++) 
		{
			bp = true;
			for (k = 0; k<cnt; k++) 
				if (matrix[i][j] == t[k]) { bp = false; break; }
			if (bp) { t[cnt] = matrix[i][j]; cnt++; }
		}
	cout << "Razlichnye simvoly: " << endl;
	for (k = 0; k<cnt; k++)cout << t[k] << ' ';
	cout << endl << "Kolichestvo: " << cnt << endl;
	
	delete[] t;
};

int main()
{
	function1();
	function2();

	for (i = 0; i < n; i++)//освобождение памяти

		delete[] matrix[i];
	delete[] matrix;

	system("pause");
	return 0;
}
Выделил другим цветом, получается высвобождение идет как в одномерном массиве, а нужно, чтобы было как в двумерном...

Последний раз редактировалось Аватар; 03.01.2016 в 15:34.
max.sokol вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разбить код на функции dissable1 Помощь студентам 0 24.12.2014 18:01
разбить на отдельные функции romanu416 Общие вопросы C/C++ 0 08.11.2013 14:01
Как разбить числовой ряд на отдельные ячейки jhenya-d Microsoft Office Excel 17 10.11.2011 13:43
Разбить текст на отдельные листы valerij Microsoft Office Word 2 12.12.2010 23:15
Разбить дату на отдельные ячейки ДД ММ ГГ Александр25 Microsoft Office Excel 5 04.03.2010 19:07