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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2014, 15:49   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию Lazarus TJpegImage вызывает экскепшн в линуксе

Здравствуйте.
Написал код:
Код:
  ext := lowercase(extractfileext(imgfilename));
  if (ext='.bmp') then
  begin
    if bmp<>nil then
    begin
      bmp.Free;
      bmp := nil;
    end;
    bmp := tbitmap.Create;
    bmp.LoadFromFile(imgfilename);
  end else
  if (ext='.jpg') or (ext='.jpeg') then
  begin
    if jpg<>nil then
    begin
      jpg.Free;
      jpg := nil;
    end;
    jpg := tjpegimage.Create;
    jpg.LoadFromFile(imgfilename);
    if bmp<>nil then
    begin
      bmp.Free;
      bmp := nil;
    end;
    bmp := tbitmap.Create;
    bmp.Assign(jpg);
    jpg.Free;
  end;
Когда он выполняется второй раз, то на строчке jpg.free на линуксе (Kubuntu 14.04) вылетает ошибка:

На винде работает ок.
BLACK_RAIN вне форума Ответить с цитированием
Старый 25.12.2014, 15:57   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В самом конце jpg в nil не сбрасывается.
А вообще есть FreeAndNil в делфи, возможно и лазарус имеет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.12.2014, 21:11   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if jpg<>nil then
begin
jpg.Free;
jpg := nil;
end;
Второй раз как это условие отрабатывает?
Я бы на твоем месте его убрал, и вообще не пересоздавал компонент.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.12.2014, 21:32   #4
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Думаю ошибка не в строке jpg.free, а в предыдущей bmp.Assign(jpg);
Код:
try
bmp.Assign(jpg);
except
ShowMessage('Ошибка в копировании');
end;
WinCoder вне форума Ответить с цитированием
Старый 25.12.2014, 21:34   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

if jpg<>nil then
begin
jpg.Free; -- ошибка здесь, поскольку jpg убит, но не nil при 2-ом входе
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 25.12.2014 в 21:37.
Аватар вне форума Ответить с цитированием
Старый 26.12.2014, 09:48   #6
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В самом конце jpg в nil не сбрасывается.
упс, точно. Теперь работает.
Цитата:
Сообщение от Stilet Посмотреть сообщение
Второй раз как это условие отрабатывает?
проверяет if jpg<>nil и срабатывает, если jpg не nil.
Цитата:
Сообщение от Stilet Посмотреть сообщение
Я бы на твоем месте его убрал, и вообще не пересоздавал компонент.
Я пробовал, но так палевно слишком. Глюки всякие получаются.
BLACK_RAIN вне форума Ответить с цитированием
Старый 26.12.2014, 10:10   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
проверяет if jpg<>nil и срабатывает, если jpg не nil.
Аватар за тебя дал ответ. Проверяй.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.12.2014, 10:32   #8
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Аватар за тебя дал ответ. Проверяй.
Дык он сразу всё правильно сказал, что я забыл jpg:=nil присвоить.
BLACK_RAIN вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компиляция в линуксе develsnik Общие вопросы C/C++ 3 14.08.2013 15:53
Перекомпиляция программы(простой) Win Lazarus в Linux Lazarus Toxifer Фриланс 0 27.11.2012 22:46
Проблема с репами в линуксе yaapelsinko Операционные системы общие вопросы 1 04.08.2012 04:04
Проблема с TJPEGImage ssman Мультимедиа в Delphi 2 29.05.2012 18:31
Ошибка конвертации TJPegImage to a TJpegImage Lokos Общие вопросы Delphi 8 20.10.2010 11:00