Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
3 / 3 / 2
Регистрация: 12.10.2012
Сообщений: 21
1

Ошибки во время исполнения программы

01.12.2012, 00:44. Просмотров 838. Ответов 11
Метки нет (Все метки)

Приветствую всех форумчян.
Во время исполнения программы система выдает 2 ошибки (см. вложения).
Кто сталкивался с такими? Чем они могут быть вызваны. Подскажите опытные люди.
0
Миниатюры
Ошибки во время исполнения программы  
Изображения
 
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2012, 00:44
Ответы с готовыми решениями:

Создание объектов во время исполнения программы
ну от должна вона работать,а не работает,викладою.там все далжно работать,нзнаю.там описание только...

Изменение значения Label во время исполнения программы
В поле edit ввожу строку, как реализовать подсчет длины строки в поле Label во время ввода(т.е....

Разное время исполнения программы
"Баловался" с кодом питона и наткнулся на интересный результат: один и тот же код выполняется...

Определение функции во время исполнения программы
Добрый день! Прошу помощи. Скажите, реально ли определить функцию во время исполнения...

11
2474 / 1850 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
01.12.2012, 00:50 2
Название программы составляет коммерческую тайну?
Эти картинки ничем не помогут решению проблемы, а судя по тому как старательно затёрто название программы, код вы не выкладите. Единственное что можно сказать, идёт обращение в недопустимый адрес. К примеру, в не созданный объект или уже удалённый.
0
3 / 3 / 2
Регистрация: 12.10.2012
Сообщений: 21
01.12.2012, 00:57  [ТС] 3
Цитата Сообщение от angstrom Посмотреть сообщение
Название программы составляет коммерческую тайну
нет, просто привычка такая.
Вот фрагмент кода:
Delphi
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
const
  EnLetters: set of Char = ['a'..'z', 'A'..'Z'];
  Numbers: set of Char = ['0'..'9'];
var
  counter, CountOfNumInPw: Integer;
  EnLetter, Number: Char;
begin
  Result := '';
  if ChkCheckBoxState(cbEn) then
    for counter := 1 to pwLength do
    begin
      EnLetter := '0';
      while not (EnLetter in EnLetters) do
        EnLetter := chr(Random(58) + 65);
      Result := Result + EnLetter
    end;
  if ChkCheckBoxState(cbNum) then // Отсюда начинаются ошибки
    CountOfNumInPw := (pwLength * 40) div 100;
    for counter := 1 to CountOfNumInPw do
    begin
      Number := 'a';
      while not (Number in Numbers) do
        Number := chr(Random(10) + 48);
      Result[Random(Length(Result)+1)]:= Number
    end
end;
Ошибочную часть пометил, уверен что проблема в ней, так как проверял.
Программа генерирует строку из букв и чисел, со строкой справляется безотказно, а вот когда доходит дело до чисел..начинается -
3-4 строки генерируются нормально, а дальше уже ошибки.
0
2474 / 1850 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
01.12.2012, 01:15 4
Не пробовали посмотреть содержимое Result в 24-ой строке?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
29943 / 19686 / 7699
Регистрация: 22.10.2011
Сообщений: 34,318
Записей в блоге: 6
01.12.2012, 01:16 5
Ты выбрал самый неудачный фрагмент для копирования сюда. Ни что такое ChkCheckBoxState, ни что такое cbNum из приведенного фрагмента неясно. Какой ты ждешь помощи? Телепатической?
0
3 / 3 / 2
Регистрация: 12.10.2012
Сообщений: 21
01.12.2012, 01:27  [ТС] 6
Цитата Сообщение от UI Посмотреть сообщение
Ты выбрал самый неудачный фрагмент для копирования сюда
Вот пояснил основные моменты
Delphi
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
const
  EnLetters: set of Char = ['a'..'z', 'A'..'Z']; //Задается множество англ.букв
  Numbers: set of Char = ['0'..'9']; // и символов
var
  counter, CountOfNumInPw: Integer; //counter переменная для счета цикла, CountOfNumInPw - количество цифр в строке
  EnLetter, Number: Char;           //переменные которые будут содержать вставляемые символы
begin                                   //EnLetter - букву, Number - соответственно цифру
  Result := '';                         //Инициализируем результат
  if ChkCheckBoxState(cbEn) then        //Функция ChkCheckBox возращает логический результат проверки состояния флажка
                                            //cbEn.State.cbChecked
    for counter := 1 to pwLength do         //Цикл заполнения строки
    begin
      EnLetter := '0';                      { Каждый раз генерируется новая буква и добавляется  
      while not (EnLetter in EnLetters) do      к результату
        EnLetter := chr(Random(58) + 65);
      Result := Result + EnLetter           }
    end;
  if ChkCheckBoxState(cbNum) then           // Отсюда начинаются ошибки
    CountOfNumInPw := (pwLength * 40) div 100;  //Узнаем 40 процентов от длины строки
    for counter := 1 to CountOfNumInPw do   //И заполняем эти 40% числами
    begin                                   //При чем, положение чисел в строке опять же генерируется 
      Number := 'a';                            //рандомно
      while not (Number in Numbers) do
        Number := chr(Random(10) + 48);
      Result[Random(Length(Result)+1)]:= Number
    end
end;
Цитата Сообщение от angstrom Посмотреть сообщение
Не пробовали посмотреть содержимое Result в 24-ой строке?
Убираю без ошибок всё. Хм..
0
2474 / 1850 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
01.12.2012, 01:27 7
У тебя ошибка в этой строке
Delphi
1
  Result[Random(Length(Result)+1)]:= Number
возможно генерирование 0, ну и соответственно запись в строку по 0-му смещению вызывает бардак.
Исправь так:
Delphi
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
const
  EnLetters: set of Char = ['a'..'z', 'A'..'Z'];
  Numbers: set of Char = ['0'..'9'];
var
  counter, CountOfNumInPw, I : Integer;
  EnLetter, Number: Char;
begin
  Result := '';
  if ChkCheckBoxState(cbEn) then
    for counter := 1 to pwLength do
    begin
      EnLetter := '0';
      while not (EnLetter in EnLetters) do
        EnLetter := chr(Random(58) + 65);
      Result := Result + EnLetter
    end;
 
  if ChkCheckBoxState(cbNum) then
    CountOfNumInPw := (pwLength * 40) div 100;
    for counter := 1 to CountOfNumInPw do
    begin
      Number := 'a';
      while not (Number in Numbers) do
        Number := chr(Random(10) + 48);
      I := Random(Length(Result)) + 1;
      Result:= Copy(Result, 1, I - 1) +  Number + Copy(Result, I, Length(Result));
    end;
end;
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
29943 / 19686 / 7699
Регистрация: 22.10.2011
Сообщений: 34,318
Записей в блоге: 6
01.12.2012, 01:31 8
Цитата Сообщение от angstrom Посмотреть сообщение
У тебя ошибка в этой строке
До этой строки черт знает что может произойти в ChkCheckBoxState, текст которой автор упорно хочет сохранить в тайне. Например, допустим, что там проверяется состояние какого-то CheckBox-а, а cbNum (фиг знает где описанная, глобальная) просто имеет такое значение, что этого CheckBox-а не существует. Отсюда и вылезет AV с первого скриншота.
0
3 / 3 / 2
Регистрация: 12.10.2012
Сообщений: 21
01.12.2012, 01:33  [ТС] 9
angstrom, огромнейшее спасибо. Не уследил.
Извиняюсь за нубство, я практикуюсь всего 2-ой день после теории.

Добавлено через 1 минуту
Цитата Сообщение от UI Посмотреть сообщение
ChkCheckBoxState
ChkCheckBoxState простая функция, созданная с целью повысить удобочитаемость кода.
Delphi
1
2
3
4
5
6
7
function ChkCheckBoxState(cb: TCheckBox): Boolean;
begin
  if (cb.State = cbChecked) then
    Result := True
  else
    Result := False
end;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
29943 / 19686 / 7699
Регистрация: 22.10.2011
Сообщений: 34,318
Записей в блоге: 6
01.12.2012, 01:35 10
Это никому не нужная функция, выбрось ее. Она только ухудшает код.
Delphi
1
2
  if cbNum.State = cbChecked then
    CountOfNumInPw := (pwLength * 40) div 100;
ничем не хуже, зато сразу понятно, что происходит.
1
2474 / 1850 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
01.12.2012, 01:35 11
Неудобный код, так сделай:
Delphi
1
2
3
4
function ChkCheckBoxState(cb : TCheckBox) : Boolean;
begin
  Result := cb.Checked;
end;
1
3 / 3 / 2
Регистрация: 12.10.2012
Сообщений: 21
01.12.2012, 01:39  [ТС] 12
Цитата Сообщение от UI Посмотреть сообщение
Это никому не нужная функция, выбрось ее. Она только ухудшает код.
Спасибо, учту при написании кода.

Добавлено через 56 секунд
angstrom, еще раз спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2012, 01:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как-нибудь можно предотвратить ошибки типа UNKNOWN IDENTIFIER во время исполнения?
Нормальной ide для кодинга на питоне нет, поэтому приходится работать в обычном редакторе с...

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

Как определить платформу во время исполнения программы?
Коллеги ! Кто знает, как во время исполнения программы на Java определить под какой операционкой...

boost threads - время исполнения программы флуктуирует. Почему?
Есть программа, написанная с использованием библиотеки boost-threads. Программа параллельно считает...

как во время исполнения программы AT90 записывать данные фле
возник вопрос. есть ли функции записи во флеш, с помощью avr-libc прямо при выполнении программы....

Исполнение функций подгружаемых во время исполнения программы из сторонних хранилищ
День добрый, отзывчивые, знающие, смекалистые. Не знаю как чётко сформулировать вопрос, поэтому...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.