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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2015, 18:51   #1
WolfEater
Пользователь
 
Регистрация: 15.02.2015
Сообщений: 21
По умолчанию C++ Builder Ошибка в коде кодирования методом Фано.

Пытался сделать программу которая сжимает графическою информацию методом Шеннона-Фано. И при компиляции высвечивается сообщение "Debugger Exception Notification".

Код кнопки которая сжимает методом Фано.
Код:
void __fastcall TForm1::Fano1Click(TObject *Sender)
{
//процедура кодирования
int Res[512]; //длина кодовых символов
int W,H; //значения ширины и высоты изображения
char C[256][256]; //значения бит кодовой таблицы
int j, lb, x, y;
unsigned char buff, c;
int **Y; Y=new int*[H]; for(int j=0; j<H; j++) Y[j]=new int[W];
BYTE *YBL; YBL=new BYTE[W*H];//создаем массив для сжатых данных
int lenf=0; //задаем начальную длину сжатого массива данных
buff=(char)0;
lb=7;
for(y=0; y<H; y++)
{
for(x=0; x<W; x++)
{
for (i = 0; i < V; i++)
//если значение яркости пикселя изображения совпадает со значением YL кодовой таблицы, фиксируем номер i
if(Y[y][x]==YL[i]) break;
//формируем код длиной Res[i]
for(j=0; j<Res[i]; j++)
{
if(C[i][j]=='1') buff |= (1<<lb);
//если все биты байта buff заполнены, записываем buff в массив YBL
if(lb==0)
{
YBL[lenf]=buff;
buff=(char)0;
lb=7;
lenf++;
}
else lb--;
}
}
}
if(lb>0) YBL[lenf]=buff; //записываем последний байт
//вычисляем коэффициент сжатия
double ratio= 1.0*(H*W)/lenf;
Edit3->Text=FloatToStrF(ratio,ffFixed,6,4);        
}
Сообщение указывает на строчку "YBL[lenf]=buff;" вроде я под неё создавал массив, а всё равно не пойму на что компилятор жалуется. Помогите понять, пожалуйста.
Изображения
Тип файла: jpg Текст ошибки.jpg (40.7 Кб, 123 просмотров)
Вложения
Тип файла: rar Исходник программы.rar (444.6 Кб, 11 просмотров)

Последний раз редактировалось WolfEater; 17.03.2015 в 18:53.
WolfEater вне форума Ответить с цитированием
Старый 17.03.2015, 19:32   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Он жалуется, что вы вышли за пределы массива.
p51x вне форума Ответить с цитированием
Старый 18.03.2015, 01:43   #3
WolfEater
Пользователь
 
Регистрация: 15.02.2015
Сообщений: 21
По умолчанию

p51x
Но всё-же как исправить эту ошибку?
WolfEater вне форума Ответить с цитированием
Старый 18.03.2015, 08:34   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Ну смотрите - у вас есть 4+ цикла до (H, W, V, Res[i]), в которых lenf может увеличиваться, причем он ограничен W*H, нигде не уменьшается, не сбрасывается. Что-то явно с алгоритмов, о чем вам программа и намекает.

П.С. На правах тыканья пальцем в небо - раз у вас lenf ограничен W*H (что размеры) и есть циклы по ним, то YBL[i] делается для каждого элемента из W*H. А значит инкремент lenf должен быть в этих циклах, но не во внутренних. Возможно, вы просто где-то не там циклы закрываете.

Последний раз редактировалось p51x; 18.03.2015 в 08:46.
p51x вне форума Ответить с цитированием
Старый 19.03.2015, 14:06   #5
WolfEater
Пользователь
 
Регистрация: 15.02.2015
Сообщений: 21
По умолчанию

p51x
Всё равно не получается. Пытаюсь lenf вставить в циклы и закрывать циклы в разных местах. Всё равно ошибка та же.
WolfEater вне форума Ответить с цитированием
Старый 19.03.2015, 14:23   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Давайте начнем с простого:
Код:
//формируем код длиной Res[i]
for(j=0; j<Res[i]; j++)
Где хоть что-то присваивается Res[i]? Почему вы его хотя бы не обнуляете? Сколько там в начале лежит?
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация алгоритма сжатия данных методом Шеннона-Фано на языке с# Hylim1991 Помощь студентам 0 23.03.2012 07:26
Реализация алгоритма сжатия данных методом Шеннона-Фано на языке с# Hylim1991 Помощь студентам 0 22.03.2012 06:54
Программа кодирования и декодирования двоичных чисел методом Голея Bocman.sev Помощь студентам 0 13.06.2011 15:07
Реализация кодирования методом Хаффмана на Pascal Azarat Помощь студентам 3 06.12.2010 09:34
Архивация методом Шеннона-Фано Ketu Паскаль, Turbo Pascal, PascalABC.NET 2 13.10.2008 19:42