Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.04.2020
Сообщений: 30
1

Ошибка "External: SIGSEGV"

07.04.2020, 18:43. Показов 1309. Ответов 6

Author24 — интернет-сервис помощи студентам
При нажатии на кнопки Button1 и Button2 возникает ошибка : "External: SIGSEGV" , которая выделяет строки
"If (Idx> PictFiles.Count-1) then Idx:=0; " и " If Idx<0 then Idx:=PictFiles.Count-1; ". Не могу понять, что не так Помогите, пожалуйста
Полный код напишу ниже

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  Menus, StdCtrls, ExtDlgs;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    CheckBox1: TCheckBox;
    Image1: TImage;
    MainMenu1: TMainMenu;
    mnAbout: TMenuItem;
    mnSave: TMenuItem;
    mnLoad: TMenuItem;
    mnPicture: TMenuItem;
    mnWork: TMenuItem;
    mnMashtab: TMenuItem;
    mnRazmer: TMenuItem;
    mnPlus: TMenuItem;
    mnMinus: TMenuItem;
    OpenDialog1: TOpenDialog;
    OpenPictureDialog1: TOpenPictureDialog;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure CheckBox1Change(Sender: TObject);
    procedure Image2Click(Sender: TObject);
    procedure mnAboutClick(Sender: TObject);
    procedure mnLoadClick(Sender: TObject);
    procedure mnPictureClick(Sender: TObject);
    procedure mnMinusClick(Sender: TObject);
    procedure mnPlusClick(Sender: TObject);
    procedure mnRazmerClick(Sender: TObject);
    procedure mnSaveClick(Sender: TObject);
     procedure CheckFolder(Sender: TObject);
  private
 
  public
 
  end;
 
var
  Form1: TForm1;
  fn, PictDir    : string;
  jpg: TJpegImage;
  bmap: TBitmap;
  ji: TJpegImage;
  pic: TPicture;
  Prop, Stretch : Boolean;
  Idx:  integer;
  PictFiles:  TStringList;
implementation
uses Unit2, Unit4;
{$R *.lfm}
 
{ TForm1 }
 
procedure CheckFolder;
var
  k:      integer;
  sr:     TSearchRec;
  s, ext: string;
  ItsPict: Boolean;
  begin
  Idx:=-1;
  if PictFiles=nil then PictFiles:=TStringList.Create
  else PictFiles.Clear;
  PictDir:=ExtractFileDir(fn)+'\';
  k:=0;
  if FindFirst(PictDir+'*.*', faAnyFile, sr) = 0 then begin
    repeat
      s:=AnsiUpperCase(sr.Name);
      ext:=ExtractFileExt(s);
      ItsPict:=(ext='.BMP') or (ext='.JPG') or (ext='.ICO') or  (ext='.PNG')
      or  (ext='.TIF') or  (ext='.GIF');
    if ItsPict then begin
      PictFiles.Add(s);
      if (s=AnsiUpperCase(ExtractFileName(fn))) then Idx:=k;
      inc(k);
      end;
    until FindNext (sr) <> 0;
    FindClose(sr);
     end;
  end;
 
procedure TForm1.mnPictureClick(Sender: TObject);
begin
 
end;
 
procedure TForm1.CheckBox1Change(Sender: TObject);
begin
if CheckBox1.Checked=false then
  Image1.Proportional:=False
  else Image1.Proportional:=True;
 
end;
 
procedure TForm1.Image2Click(Sender: TObject);
begin
 
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Idx=-1 then Exit;
  Inc(Idx);
   If (Idx> PictFiles.Count-1) then Idx:=0;
 
fn:=PictDir+PictFiles.Strings[Idx];
  Image1.Picture.LoadFromFile(fn);
 Caption:=fn;
end;
 
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 if Idx=-1 then Exit;
  Dec(Idx);
 
  If Idx<0 then Idx:=PictFiles.Count-1;
 
  fn:=PictDir+PictFiles.Strings[Idx];
  Image1.Picture.LoadFromFile(fn);
 
end;
 
 
procedure TForm1.mnAboutClick(Sender: TObject);
begin
   Unit4.Form4.Show
end;
 
 
procedure TForm1.mnLoadClick(Sender: TObject);
begin
 if OpenDialog1.Execute then begin
    fn:=OpenDialog1.FileName;
    Image1.Picture.LoadFromFile(fn);
    Caption:=fn;
end;
 end;
 
procedure TForm1.mnMinusClick(Sender: TObject);
begin
Image1.Width:=Image1.Width-250;
 Image1.height:=Image1.Height-250;
 mnMinus.Clear;
end;
 
procedure TForm1.mnPlusClick(Sender: TObject);
begin
   Image1.Width:=Image1.Width+250;
   Image1.height:=Image1.Height+250;
   mnPlus.Clear;
end;
 
procedure TForm1.mnRazmerClick(Sender: TObject);
begin
  Unit2.Form2.Show
end;
 
procedure TForm1.mnSaveClick(Sender: TObject);
begin
  if SaveDialog1.Execute then
    begin
      Image1.Picture.SaveToFile(SaveDialog1.FileName);
    end;
end;
 
procedure TForm1.CheckFolder(Sender: TObject);
begin
 
end;
 
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2020, 18:43
Ответы с готовыми решениями:

Ненавистная ошибка External:SIGSEGV
Программа банальна. Два элемента Memo, создается матрица, выводится в Memo1, потом идет обработка...

SaveDialog и ошибка External: SIGSEGV
Здравствуйте. Столкнулся с непонятным поведением в Lazarus, а именно рандомным появлением...

Ошибка External:sigsegv, что делать?
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms,...

Возникла такая вот ошибка: External: SIGSEGV
Приветствую. Возникла такая вот ошибка; В яем ошибка не понимаю. Помогите пожалуйсто unit Unit1;...

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
07.04.2020, 20:02 2
Где создается PictFiles? Нет, я понимаю, что в процедуре CheckFolder, но ведь эта процедура нигде не вызывается. Вот и попытка обращения к несуществующему объекту...
0
0 / 0 / 0
Регистрация: 07.04.2020
Сообщений: 30
07.04.2020, 20:09  [ТС] 3
А где его нужно создать?
Я его прописала в var..
Не понимаю
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
07.04.2020, 20:54 4
Нужно где-то вызвать процедуру CheckFolder, чтобы создать список файлов в папке, заданной переменной fn...

Как и где это сделать - я не знаю, я не телепат, чтобы догадаться, как это должно было работать, что есть на форме, как переходить между папками вообще. Это должен знать автор программы.
0
0 / 0 / 0
Регистрация: 07.04.2020
Сообщений: 30
07.04.2020, 21:17  [ТС] 5
В папке несколько изображений. Программа должна листать "вперёд" и "назад" (кнопки Button1 и Button2 соответственно) эти изображения из папки.
Дописала программу до этого момента и остановилась...

Не могу понять, где вызвать эту процедуру
0
Джоуи
1081 / 643 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
08.04.2020, 09:14 6
Лучший ответ Сообщение было отмечено Hope_2000 как решение

Решение

Hope_2000, у Вас две процедуры CheckFolder, случайно или намеренно? (одна является методом формы Form1, другая самостоятельная процедура).

Добавлено через 5 минут
Для начала попытайтесь ясно представить себе, как работает Ваша программа:
Код
1) Запускается прога, создается форма
2) Программа ждет действий пользователя
То есть не совершено никаких приготовлений. Теперь смотрите
Цитата Сообщение от Hope_2000 Посмотреть сообщение
Pascal
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
begin
 if Idx=-1 then Exit;
 Inc(Idx);
 If (Idx> PictFiles.Count-1) then Idx:=0;
fn:=PictDir+PictFiles.Strings[Idx];
 Image1.Picture.LoadFromFile(fn);
 Caption:=fn;
end;
Здесь Вы сразу же обращаетесь к PictFiles.Strings[Idx], хотя PictFiles - это объект, а объект сначала нужно проинициализировать, чтобы ему хотя бы была выделена память.

Добавлено через 1 минуту
Как сказал volvo, мы не знаем за Вас, как Вы хотите вызывать CheckFolder и когда. Могу предложить, например, при запуске программы (по вызову Form1Create)
1
0 / 0 / 0
Регистрация: 07.04.2020
Сообщений: 30
08.04.2020, 10:59  [ТС] 7
Спасибо большое, я уже разобралась
Очень глупые ошибки были
0
08.04.2020, 10:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2020, 10:59
Помогаю со студенческими работами здесь

Ошибка: raised exception class 'External: SIGSEGV'
Мой код проходит компиляцию, но при запуске .exe после того, как нажимаю на кнопку, мной созданную...

Ошибка: Проект вызвал класс исключения External:SIGSEGV
Привет! Работаю над приложением для работы с оценками учеников. Решил начать с раздела настроек....

Project project1 raised exception class 'External: SIGSEGV' In file 'forms.pp' at line 2029 - Что за ошибка?
Здравствуйте форумчане. Писал программу на лазарусе, сунул в юнит вот такой код: ...

Ошибка "External: sigsegv" при нажатии на кнопку
Вылетает ошибка при нажатии на кнопку- класс исключения &quot;External: sigsegv&quot;. помогите пожалуйста...

Ошибка "External: SIGSEGV" в классе TControl
У меня при работе программы появляется ошибка. Что она означает?

Ошибка: External "SIGSEGV" Error
Такая проблема: Я сейчас обучаюсь в институте после колледжа, и там некоторые предметы у меня была...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru