Common Language Runtime

PascalABCCompiler.Core v3.2.0.1311 (30.08.2016), debug version Runtime version: 4.0.30319.42000 OS version: Microsoft Windows NT 6.2.9200.0 Processor count: 4 WorkingSet: 153792 kb

Здравствуйте!

Программа выдает такую ошибку при запуске: “Ошибка времени выполнения: Среда выполнения Common Language Runtime обнаружила недопустимую программу.

Выделяет строку с созданием класса. Т.е.:

S := new Snake; // Snake - класс с множеством функций и описанной процедурой конструктора

Интересно, что при компиляции ошибка не появляется, а только при запуске программы. С чем это может быть связанно, а точнее, связанно ли это с Паскалем или же с системой?

Код приведите

Хм, похоже я тут все свои сообщения удалил Oo

Короче, вот код:

type
  Snake = class
    public
      constructor create;
  end;
  
procedure Snake.Create;
begin
  writeln(9);
end;

var S:Snake;
BEGIN
  S := new Snake;
END.

Версию среды обновил с сайта. Ошибка повторяется и на обновленной версии и на другом компьютере. Ошибка исчезает если описание конструктора внести в тело класса.

Дело в том, что у конструктора весьма большое описание и в теле класса оно смотрится не очень хорошо. Временно решил проблему, создав еще одну функцию в классе которую и вызываю в конструкторе, уже описанном в самом классе:

type
  Snake = class
    private procedure CreateTmp;
    public
      constructor create;
      begin
        CreateTmp;
      end;
  end;
  
procedure Snake.CreateTmp;
begin
  writeln(9);
end;

var S:Snake;
BEGIN
  S := new Snake;
END.

надо писать constructor Snake.Create. А так, конечно, должна быть ошибка компиляции, а не падение при выполнении.

1 лайк

Хм, готов поклясться, что еще вчера утром, на мое “constructor Snake.Create” он мне сообщил что слово “constructor” надо использовать только в описании класса, хотя сейчас работает нормально. Видимо я что-то вчера не так понял, а потом странное исключение вконец меня запутало :slight_smile: Спасибо за помощь!