Tstrings вызывает SIGSEGV

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Tstrings вызывает SIGSEGV

Сообщение alien308 » 06.11.2017 22:39:10

сообщение о ошибке:
Код: Выделить всё
Проект project1 вызвал класс исключения 'External: SIGSEGV'.
В файле 'unit1.pas' на строке 39:
n := ports.Count;


код
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
    Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;

type

    { TForm1 }

    TForm1 = class(TForm)

        ports: TStrings;  {определяем}

        procedure FormCreate(Sender: TObject);
    private
        { private declarations }
    public
        { public declarations }
    end;

var
    Form1: TForm1;


implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
    n: integer;
begin
  n := ports.Count;  {ошибка}

end;

end.


Добавлено спустя 15 минут 25 секунд:
1. Нужно использовать не TStrings, а его реализацию ТStringList.
2. Перед использованием вызвать конструктор ports := TStringList.Create;
alien308
новенький
 
Сообщения: 18
Зарегистрирован: 25.08.2012 09:37:47

Re: Tstrings вызывает SIGSEGV

Сообщение Лекс Айрин » 07.11.2017 10:56:35

Нужна проверка на несовпадение Count с -1. и выход из процедуры обработки если это так.

Как я понял, это касается всех списков.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4097
Зарегистрирован: 19.02.2013 16:54:51

Re: Tstrings вызывает SIGSEGV

Сообщение wavebvg » 07.11.2017 11:22:34

alien308 писал(а):1. Нужно использовать не TStrings, а его реализацию ТStringList.
2. Перед использованием вызвать конструктор ports := TStringList.Create;

3. Удалять объект
wavebvg
постоялец
 
Сообщения: 283
Зарегистрирован: 28.02.2008 04:57:35


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: Google Adsense [Bot] и гости: 5

Рейтинг@Mail.ru