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

Что за external: sigsegv?

03.06.2016, 00:42. Показов 3022. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот тут такая задачка, начал соединять формы и тут во время теста получил эту ошибку external: sigsegv в файле House.pas на строчке 69. Пытался как-то обойти или убрать вообще метод, но понять не могу, то ли в методе добавления проблема, то ли в создании пустого контейнера при включении программы...
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
unit House;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Flat;
type
  tHouse = class
private
  mFlats: array of tFlat;
  size: integer;
  count: integer;
public
  constructor Create(aSize: integer);
  function GetSize: integer;
  function GetCount: integer;
  function Delete: tFlat;
  function Sum: integer;
  procedure Add(aFlat:tFlat);
  {procedure Save(fName: string);
  procedure Load(fName: string);}
end;
 
implementation
 
constructor tHouse.Create(aSize: integer);
begin
  size:=aSize;
  count:=0;
  SetLength(mFlats, size);
end;
 
function tHouse.GetSize: integer;
begin
  result:=size;
end;
 
function tHouse.GetCount: integer;
begin
  result:=count;
end;
 
function tHouse.Delete: tFlat;
begin
  if count=1 then result:=nil
             else begin
               count:=count-1;
               result:=mFlats[count];
             end;
end;
 
function tHouse.Sum: integer;
var summ, pKol,pPl, i: integer;
begin
  summ:=0; pKol:=0; pPl:=0;
  for i:=0 to count-1  do begin
    pKol:=mFlats[i].GetKol.GetRate+pKol;
    pPl:=mFlats[i].GetPl.GetRate+pPl;
  end;
  summ:=pKol+pPl;
  result:=summ;
end;
 
procedure tHouse.Add(aFlat: tFlat);
var i: integer;
begin
  if count=size then         <--
                begin
                  i:=size div 2;
                  size:=size+i;
                  SetLength(mFlats, size);
                end;
  mFlats[count]:=aFlat;
  count:=count+1;
end;
 
{procedure tHouse.Save(fName: string);
var TextF:TextFile;
 i:integer;
begin
Assign(TextF,fName);
Rewrite(TextF);
 
for i:=0 to Count-1 do
begin
Writeln(TextF,mFlats[i].IntToStr(GetNum));
Writeln(TextF,mFlats[i].GetKol.IntToStr(GetRate));
Writeln(TextF,mFlats[i].GetPl.IntToStr(GetRate));
end;
Close(TextF);
end;}
 
{procedure tHouse.Load(fName: string);
var TextF:TextFile;
 i:integer;
 aNum,PlRate,KolRate:String;
 Temp:tFlat;
begin
Count:=0;
Assign(TextF,fName);
Reset(TextF);
 
while not EOLN(TextF)do begin
begin
Readln(TextF,StrToInt(aNum));
Readln(TextF,StrToInt(PlRate));
Readln(TextF,StrToInt(KolRate));
Temp:=tFlat.Create(StrToInt(aNum),StrToInt(PlRate),StrToInt(KolRate));
Add(Temp);
end;
end;
Close(TextF);
end;}
 
end.
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
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    ButAdd: TButton;
    ButDell: TButton;
    BSave: TButton;
    BLoad: TButton;
    Ras: TButton;
    tRasPl: TEdit;
    tRasKol: TEdit;
    RasKol: TLabel;
    RasPl: TLabel;
    tNumFlat: TEdit;
    IzmRas: TButton;
    NumFlat: TLabel;
    ListBox1: TListBox;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    tSumRas: TEdit;
    tHead: TEdit;
    Head: TLabel;
    SumRas: TLabel;
    PotrPlIn: TEdit;
    PotrPl: TLabel;
    PotrKolIn: TEdit;
    PotrKol: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure ButAddClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
uses House, Flat;
var j: integer;
    Home: tHouse;
    Room: tFlat;
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject); <--
begin
Home.Create(10);
j:=0;
end;
 
procedure TForm1.ButAddClick(Sender: TObject);
var a, b :integer;
begin
j:=j+1;
Room:=tFlat.Create(j, StrToInt(PotrKolIn.Text), StrToInt(PotrPlIn.Text));
Home.Add(Room);
a:=StrToInt(PotrKolIn.Text); b:=StrToInt(PotrPlIn.Text);
PotrKolIn.Text:=''; PotrPlIn.Text:='';
ListBox1.Items.Clear;
ListBox1.Items.Add('Добавлена квартира №'+IntToStr(j));
ListBox1.Items.Add('Расход колонки:'+IntToStr(a));
ListBox1.Items.Add('Расход плиты:'+IntToStr(b));
end;
 
end.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.06.2016, 00:42
Ответы с готовыми решениями:

'External: SIGSEGV' - подскажите, что это?
Помогите, плиз, добраться до корня проблемы. Кусок листа: procedure TRialtoForm.MPrintCorp10Click(Sender: TObject);//Вывод &gt;10% ...

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

Что за ошибка "External: SIGSEGV"?
Подскажите как избавится от ошибки External:SIGSEGV? она возникает вот здесь, т.е. при самой обрисовке ...

11
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33421 / 21527 / 8240
Регистрация: 22.10.2011
Сообщений: 36,935
Записей в блоге: 12
03.06.2016, 00:46
Pascal
1
2
3
4
5
procedure TForm1.FormCreate(Sender: TObject); <--
begin
Home.Create(10); // корень проблемы
j:=0;
end;
Это Турбо-Паскалевский стиль, замени на
Pascal
1
Home := THouse.Create(10);
0
0 / 0 / 0
Регистрация: 03.06.2016
Сообщений: 7
03.06.2016, 00:56  [ТС]
volvo, пробовал уже, толку ноль
0
03.06.2016, 00:57

Не по теме:

Цитата Сообщение от volvo Посмотреть сообщение
Это Турбо-Паскалевский стиль
Вот те на! При чем тут Турбо-Паскаль?

0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33421 / 21527 / 8240
Регистрация: 22.10.2011
Сообщений: 36,935
Записей в блоге: 12
03.06.2016, 01:08

Не по теме:

При том, что это стиль работы с объектами, а не с классами. А кто использует объекты при наличии классов? Правильно, те, кто пришел с Турбо :)



Цитата Сообщение от Farel Посмотреть сообщение
толку ноль
Не верю. И проверить не могу, модули не все присутствуют. Ищи, где еще подобным образом "создаются" экземпляры.
0
0 / 0 / 0
Регистрация: 03.06.2016
Сообщений: 7
03.06.2016, 01:14  [ТС]
Вот остальные:
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
unit Flat;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, GazKol, GazPl;
type
  tFlat = class
private
  num: integer;
  kolRate: tGazKol;
  plRate: tGazPl;
public
  constructor Create(aNum, kRate, pRate: integer);
  function GetNum: integer;
  function GetKol: tGazKol;
  function GetPl: tGazPl;
  procedure SetNum(nNum: integer);
  procedure SetKol(aGazKol: tGazKol);
  procedure SetPl(aGazPl: tGazPl);
end;
 
implementation
 
constructor tFlat.Create(aNum, kRate, pRate: integer);
begin
  num:=aNum;
  kolRate:=tGazKol.Create(kRate);
  plRate:=tGazPl.Create(pRate);
end;
 
function tFlat.GetNum: integer;
begin
  Result:=num;
end;
 
function tFlat.GetKol: tGazKol;
begin
  Result:=kolRate;
end;
 
function tFlat.GetPl: tGazPl;
begin
  Result:=plRate;
end;
 
procedure tFlat.SetNum(nNum: integer);
begin
  num:=nNum;
end;
 
procedure tFlat.SetKol(aGazKol: tGazKol);
begin
  kolRate:=aGazKol
end;
 
procedure tFlat.SetPl(aGazPl: tGazPl);
begin
  plRate:=aGazPl;
end;
 
end.
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
unit GazPl;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils;
type
  tGazPl = class
  private
    Rate: integer;
  public
    constructor Create(aRate: integer);
    function GetRate: integer;
    procedure SetRate(bRate: integer);
  end;
 
  implementation
 
  constructor tGazPl.Create(aRate: integer);
  begin
    Rate:=aRate;
  end;
 
  function tGazPl.GetRate: integer;
  begin
    Result:=Rate;
  end;
 
  procedure tGazPl.SetRate (bRate:integer);
  begin
    Rate:=bRate;
  end;
 
  end.
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
uses
  Classes, SysUtils;
type
  tGazKol = class
private
  Rate: integer;
public
  constructor Create(aRate: integer);
  function GetRate: integer;
  procedure SetRate(bRate: integer);
end;
 
implementation
 
constructor tGazKol.Create(aRate: integer);
begin
  Rate:=aRate;
end;
 
function tGazKol.GetRate: integer;
begin
  Result:=Rate;
end;
 
procedure tGazKol.SetRate (bRate:integer);
begin
  Rate:=bRate;
end;
 
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33421 / 21527 / 8240
Регистрация: 22.10.2011
Сообщений: 36,935
Записей в блоге: 12
03.06.2016, 01:16
Проверил в FPC, убрав всю мишуру. Нет никакого SIGSEGV в этом месте.
0
0 / 0 / 0
Регистрация: 03.06.2016
Сообщений: 7
03.06.2016, 01:17  [ТС]
Какую именно?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33421 / 21527 / 8240
Регистрация: 22.10.2011
Сообщений: 36,935
Записей в блоге: 12
03.06.2016, 01:20
Просто создал объект класса thouse, и добавил к нему комнату так, как это сделано у тебя, но без формы и компонентов на ней, лень мне всю форму переделывать, чтобы проверить код полностью.
0
0 / 0 / 0
Регистрация: 03.06.2016
Сообщений: 7
06.06.2016, 16:26  [ТС]
До сих пор не могу разобраться с этой ошибкой при добавлении элемента. Указывает на строчку 69 в методе добавления. Сколько раз уже пробовал, но не получается Помогите, люди добрые Если нужно для информации, контейнер должен быть на основе динамического стека. Файл так же имеется.
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
unit House;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Flat;
type
  tHouse = class
private
  mFlats: array of tFlat;
  size: integer;
  count: integer;
public
  constructor Create(aSize: integer);
  function GetSize: integer;
  function GetCount: integer;
  function Delete: tFlat;
  function Sum: integer;
  procedure Add(aFlat:tFlat);
  {procedure Save(fName: string);
  procedure Load(fName: string);}
end;
 
implementation
 
constructor tHouse.Create(aSize: integer);
begin
  size:=aSize;
  count:=0;
  SetLength(mFlats, size);
end;
 
function tHouse.GetSize: integer;
begin
  result:=size;
end;
 
function tHouse.GetCount: integer;
begin
  result:=count;
end;
 
function tHouse.Delete: tFlat;
begin
  if count=1 then result:=nil
             else begin
               count:=count-1;
               result:=mFlats[count];
             end;
end;
 
function tHouse.Sum: integer;
var summ, pKol,pPl, i: integer;
begin
  summ:=0; pKol:=0; pPl:=0;
  for i:=0 to count-1  do begin
    pKol:=mFlats[i].GetKol.GetRate+pKol;
    pPl:=mFlats[i].GetPl.GetRate+pPl;
  end;
  summ:=pKol+pPl;
  result:=summ;
end;
 
procedure tHouse.Add(aFlat: tFlat);
var i: integer;
begin
  if count=size then    <=Вот здесь указывает ошибку
                begin
                  i:=size div 2;
                  size:=size+i;
                  SetLength(mFlats, size);
                end;
  mFlats[count]:=aFlat;
  count:=count+1;
end;
 
{procedure tHouse.Save(fName: string);
var TextF:TextFile;
 i:integer;
begin
Assign(TextF,fName);
Rewrite(TextF);
 
for i:=0 to Count-1 do
begin
Writeln(TextF,mFlats[i].IntToStr(GetNum));
Writeln(TextF,mFlats[i].GetKol.IntToStr(GetRate));
Writeln(TextF,mFlats[i].GetPl.IntToStr(GetRate));
end;
Close(TextF);
end;}
 
{procedure tHouse.Load(fName: string);
var TextF:TextFile;
 i:integer;
 aNum,PlRate,KolRate:String;
 Temp:tFlat;
begin
Count:=0;
Assign(TextF,fName);
Reset(TextF);
 
while not EOLN(TextF)do begin
begin
Readln(TextF,StrToInt(aNum));
Readln(TextF,StrToInt(PlRate));
Readln(TextF,StrToInt(KolRate));
Temp:=tFlat.Create(StrToInt(aNum),StrToInt(PlRate),StrToInt(KolRate));
Add(Temp);
end;
end;
Close(TextF);
end;}
 
end.
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
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    ButAdd: TButton;
    ButDell: TButton;
    BSave: TButton;
    BLoad: TButton;
    Ras: TButton;
    tRasPl: TEdit;
    tRasKol: TEdit;
    RasKol: TLabel;
    RasPl: TLabel;
    tNumFlat: TEdit;
    IzmRas: TButton;
    NumFlat: TLabel;
    ListBox1: TListBox;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    tSumRas: TEdit;
    tHead: TEdit;
    Head: TLabel;
    SumRas: TLabel;
    PotrPlIn: TEdit;
    PotrPl: TLabel;
    PotrKolIn: TEdit;
    PotrKol: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure ButAddClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
uses House, Flat;
var j: integer;
    Home: tHouse;
    Room: tFlat;
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Home:=tHouse.Create(100);
j:=0;
end;
 
procedure TForm1.ButAddClick(Sender: TObject);
var a, b :integer;
begin
j:=j+1;
Room:=tFlat.Create(j, StrToInt(PotrKolIn.Text), StrToInt(PotrPlIn.Text));
Home.Add(Room);
a:=StrToInt(PotrKolIn.Text); b:=StrToInt(PotrPlIn.Text);
PotrKolIn.Text:=''; PotrPlIn.Text:='';
ListBox1.Items.Clear;
ListBox1.Items.Add('Добавлена квартира №'+IntToStr(j));
ListBox1.Items.Add('Расход колонки:'+IntToStr(a));
ListBox1.Items.Add('Расход плиты:'+IntToStr(b));
end;
 
end.
Вложения
Тип файла: rar Pro.rar (333.1 Кб, 1 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33421 / 21527 / 8240
Регистрация: 22.10.2011
Сообщений: 36,935
Записей в блоге: 12
06.06.2016, 16:51
Лучший ответ Сообщение было отмечено volvo как решение

Решение

У тебя событию OnCreate не назначен обработчик, поэтому Home = nil, и разыменование нулевого указателя. Назначь:
Миниатюры
Что за external: sigsegv?  
0
0 / 0 / 0
Регистрация: 03.06.2016
Сообщений: 7
06.06.2016, 16:56  [ТС]
Ооо, спасибо большое, наконец-то, такая мелочь) Всё же С# роднее чем лазарус) Ещё раз спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.06.2016, 16:56
Помогаю со студенческими работами здесь

External: SIGSEGV
Я пишу программу, по обучению Английского и сперва хочу сделать алфавит с помощью массива из BitBtn и расстваить их все. Было всё...

External:SIGSEGV
Намучился с это программой, уже не знаю что делать. Помогите! Выдает ошибку External:SIGSEGV procedure TForm1.MenuSredClick(Sender:...

External: SIGSEGV
Привет. Начал сейчас изучать классы, написал вроде как простейший класс, но на 10-й строке программа стабильно выдаёт ошибку из сабжа. ...

External: SIGSEGV в форме
Доброго вам. Первый раз занимаюсь любовью с формами. Суть состоит в том, что эта коварная ошибка появляется только тогда, когда я пытаюсь...

'External: SIGSEGV' - указывает на BEGIN
procedure TRialtoForm.QSortDes(min: integer; max: integer; k: integer); var mid, l, r: integer; begin mid := trunc((min + max)...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru