Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Ошибка при выделении памяти

Ответить
Настройки темы
C/C++ - Ошибка при выделении памяти

Аватара для alexprom65

Старожил


Сообщения: 188
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Доброго времени суток. Пишу программу, удаляющую строки из двумерного массива, в которых есть хотя бы один локальный максимум (элемент, больший всех своих соседей). Но программа крашится уже на этапе выделения памяти. Ввожу количество строк, потом столбцов, и происходит слёт. С фиксированной памятью работает, хоть и не удаляет строки. А мне нужна программа, работающая именно с динамической памятью. Подскажите студенту, пожалуйста. Вроде, элементарная задачка, но уже вызывает столько проблем.
Код: Выделить весь код
#include <stdio.h>
#include <stdlib.h>
int del (int **a, int m, int n)
{
	int h, i, j, l, k;
	k=0;
	int *b=(int*)malloc(m*sizeof(int));
	if (b==NULL)
			printf("\nCan't create massive");
	for(i=0;i<m;i++)
	{
		h=0;
		if(i==m-1)
		{
			for(j=0;j<n;j++)
					if (j==n-1)
						{
							if(a[i][j]>a[i][j-1] && a[i][j]>a[i-1][j])
								h++;
						}
					else
					switch (j)
					{
						case (0):
						{
							if(a[i][j]>a[i][j+1] && a[i][j]>a[i-1][j])
								h++;
							break;
						}
						default:
						{
							if(a[i][j]>a[i][j+1] && a[i][j]>a[i-1][j] && a[i][j]>a[i][j-1])
								h++;
							break;
						}
					}
					if(h!=0)
					{
						b[k]=i;
						k++;
					}
		}
		else
		switch (i)
		{
			case (0):
				{
					for(j=0;j<n;j++)
					if (j==n-1)
						{
							if(a[i][j]>a[i][j-1] && a[i][j]>a[i+1][j])
								h++;
							break;
						}
					else
					switch (j)
					{
						case (0):
						{
							if(a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j])
								h++;
							break;
						}
						default:
						{
							if(a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j] && a[i][j]>a[i][j-1])
								h++;
							break;
						}
					}
					if(h!=0)
					{
						b[k]=i;
						k++;
					}
					break;
				}
			default:
				{
					for(j=0;j<n;j++)
					if (j==n-1)
						{
							if(a[i][j]>a[i][j-1] && a[i][j]>a[i+1][j] && a[i][j]>a[i-1][j])
								h++;
						}
					else
					switch (j)
					{
						case (0):
						{
							if(a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j] && a[i][j]>a[i-1][j])
								h++;
							break;
						}
						default:
							if(a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j] && a[i][j]>a[i-1][j] && a[i][j]>a[i][j-1])
								h++;
							break;
					}
					if(h!=0)
					{
						b[k]=i;
						k++;
					}
					break;
				}
		}
	}
	for(l=0;l<k;l++)
	{
		for(i=b[l];i<m-1;i++)
			for(j=0;j<n;j++);
				a[i][j]=a[i+1][j];
		free (a[m-1]);
		m--;
	}
	free (b);
}

int main()
{
	int i, j, m, n;
	int **a;
	printf("Type number of strings: ");
	scanf("%d", m);
	printf("\nType number of columns: ");
	scanf("%d", n);
	a=(int**)malloc(m*sizeof(int*));
	if(a==NULL)
		printf("\nERROR");
	for(i=0;i<m;i++)
	a[i]=(int*)malloc(n*sizeof(int));
	if(a==NULL)
		printf("\nERROR");
	printf("\nType elements of matrix:\n");
	for(i=0;i<m;i++)
	for(j=0;j<n;j++)
	scanf("%d", &a[i][j]);
	for(i=0;i<m;i++)
	{
		printf("\n");
		for(j=0;j<n;j++)
		printf("%d", a[i][j]);
	}
	del(a,m,n);
	printf("\nResult is\n");
	for(i=0;i<m;i++)
	{
		printf("\n");
		for(j=0;j<n;j++)
		printf("%d", a[i][j]);
	}
	for(i=0;i<m;i++)
	free (a[i]);
	free (a);
	getch();
	return 0;
}

Отправлено: 15:48, 01-04-2015

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Ошибка при выделении памяти

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Загрузка процессора при выделении mpg файлов. Yoallz Microsoft Windows 7 19 13-09-2014 08:07
Интерфейс - Дергание окна при выделении mrfast@vk Microsoft Windows 8 и 8.1 2 19-05-2014 20:46
Разное - Как изменить цвет фона при выделении(например текста)? Adam_gt Оформление Windows 11/ 10 / 8 / 7 / Vista 6 30-10-2012 21:55
2003/XP/2000 - Дублирование объектов при групповом выделении в MS PowerPoint 2003 ZaxaR_II Microsoft Office (Word, Excel, Outlook и т.д.) 0 18-02-2011 13:04
Интерфейс - [решено] Рамка при выделении объекта Delirium Microsoft Windows 2000/XP 1 11-03-2009 04:14




 
Переход