Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 11
1

Lazarus намертво зависает при выполнении этого кода

27.05.2015, 12:50. Показов 1752. Ответов 11
Метки нет (Все метки)

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
29
30
31
32
33
34
35
begin
{size-Количество кнопок}
    i:=Form2.Showmodal;
    setlength(but,size);
    c:=0;
    d:=0;
    posarray:=0;
    while   HorBut-VertBut<=5 do
           begin
                for VertBut:=1 to size do
                begin
                     g:=size/j;
                     if (Frac(g)=0) then
                        HorBut:=g;
                end;
           end;
    repeat
          TopPos:=82+(32*c);
          repeat
                WidthPos:=32*d;
                but[posarray]:=TBitBtn.Create(Form1);
                but[posarray].Parent:=GroupBox2;
                but[posarray].Top:=TopPos;
                but[posarray].Width:=WidthPos;
                but[posarray].Constraints.MinHeight:=32;
                but[posarray].Constraints.MaxHeight:=32;
                but[posarray].Constraints.MinWidth:=32;
                but[posarray].Constraints.MaxWidth:=32;
                posarray:=posarray+1;
                d:=d+1;
          until d=h-1;
          d:=0;
          c:=c+1;
                until c=j-1;
           end;
Когда задаю размер и нажимаю на кнопку программа намертво зависает. Почему?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2015, 12:50
Ответы с готовыми решениями:

Прога зависает при выполнении процедуры
В лазаре 1.2.6 процедура работала нормально, а в лазаре 1.6 программа зависает при выполнении этой...

Зависает браузер при выполнении кода
window.onload = function () { var mas = document.getElementById('back-fon').children; var...

При выполнении кода форма зависает. Как вывести прогрессбар?
Пишу программу, которая должна с моего сайта скачать нудный файл, и старый заменить новым. Типа...

комп зависает намертво при работе с новым винчестером, после перезагрузки компа зависает при загрузке BIOS
купил новый винчестер. комп стал зависать намертво. при перезагрузке, зависает уже при загрузке на...

11
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31045 / 20279 / 7897
Регистрация: 22.10.2011
Сообщений: 35,179
Записей в блоге: 6
27.05.2015, 12:55 2
Можно было привести код, который надо просто взять откомпилировать, запустить и посмотреть, а не выдумывать, и не телепатировать, что за массивы, какие типы данных, где описаны, какого размера, и так далее? Минимальный проект, на котором повторяется описанное поведение приведи...
0
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 11
27.05.2015, 13:12  [ТС] 3
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
29
30
31
32
33
34
35
36
37
38
39
40
41
Unit1
procedure TForm1.Button1Click(Sender: TObject);
var size,c,d,WidthPos,TopPos,posarray,VertBut,i:integer;
     g,HorBut:real;
     but:array of TBitBtn;
begin
{size-Количество кнопок}
    i:=Form2.Showmodal;
    setlength(but,size);
    c:=0;
    d:=0;
    posarray:=0;
    while h-j<=5 do
           begin
                for j:=1 to size do
                begin
                     g:=size/j;
                     if (Frac(g)=0) then
                        h:=g;
                end;
           end;
    repeat
          y:=82+(32*c);
          repeat
                x:=32*d;
                but[posarray]:=TBitBtn.Create(Form1);
                but[posarray].Parent:=GroupBox2;
                but[posarray].Top:=y;
                but[posarray].Width:=x;
                but[posarray].Constraints.MinHeight:=32;
                but[posarray].Constraints.MaxHeight:=32;
                but[posarray].Constraints.MinWidth:=32;
                but[posarray].Constraints.MaxWidth:=32;
                but[posarray].OnClick:=@YesOrNo;
                posarray:=posarray+1;
                d:=d+1;
          until d=h-1;
          d:=0;
          c:=c+1;
                until c=j-1;
           end;
Delphi
1
2
3
4
5
6
Unit2
procedure TForm2.Button1Click(Sender: TObject);
begin
  size:=StrToInt(Edit1.Text);
  Self.ModalResult:=size;
end;
Вот так правильно?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31045 / 20279 / 7897
Регистрация: 22.10.2011
Сообщений: 35,179
Записей в блоге: 6
27.05.2015, 13:20 4
Что такое size? Где оно описывается, я этого ничего не знаю, код тестировать невозможно...

Добавлено через 3 минуты
Как вариант ошибки - та переменная size, которая изменяется в TForm2.Button1Click, не имеет никакого отношения к переменной, описанной локально в TForm1.Button1Click, соответственно, в локальной - мусор, размер массива but выставлен непонятно во что, и пошло-поехало... Что такое j и h - вообще непонятно, чему они равны на момент работы TForm1.Button1Click?
0
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 11
27.05.2015, 13:49  [ТС] 5
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
29
30
31
32
33
34
35
36
37
38
Unit1
procedure TForm1.Button1Click(Sender: TObject);
var size,c,d,PosInArray,VertBut,HorBut:integer;
  g:real;
  but:array of TBitBtn;
begin
    Form2.Showmodal;
    setlength(but,size);
    c:=0;
    d:=0;
    PosInArray:=0;{Позиция в массиве};
    VertBut:=0;{Количество рядов кнопок};
    HorBut:=0;{Количество кнопок в ряду};
    repeat
          for VertBut:=1 to size do
                begin
                     g:=size/VertBut;
                     if (Frac(g)=0) then
                        HorBut:=Trunc(g);
                end;
    until HorBut-VertBut<=5;
    repeat
          repeat
                but[PosInArray]:=TBitBtn.Create(Form1);
                but[PosInArray].Parent:=GroupBox2;
                but[PosInArray].Top:=82+(33*c);
                but[PosInArray].Width:=1+(33*d);
                but[PosInArray].Constraints.MinHeight:=32;
                but[PosInArray].Constraints.MaxHeight:=32;
                but[PosInArray].Constraints.MinWidth:=32;
                but[PosInArray].Constraints.MaxWidth:=32;
                PosInArray:=PosInArray+1;
                d:=d+1;
          until d=HorBut-1;
          d:=0;
          c:=c+1;
    until c=VertBut-1;
end;
Delphi
1
2
3
4
5
6
7
8
Unit2
procedure TForm2.Button1Click(Sender: TObject);
var Size:integer;
begin
  size:=StrToInt(Edit1.Text);
  Self.ModalResult:=size;
 
end;
Ну как то так. Ошибка не из за size.
0
пофигист широкого профиля
4339 / 2845 / 810
Регистрация: 15.07.2013
Сообщений: 16,508
27.05.2015, 14:33 6
Цитата Сообщение от Vadim954 Посмотреть сообщение
Ошибка не из за size.
А бред в коде так и остался. В переменной size по прежнему мусор. Так что ХЗ сколько памяти выделяется в строке 8

Добавлено через 1 минуту
Цикл
Delphi
1
for VertBut:=1 to size do
может выполняться ХЗ сколько часов из-за мусорного значения size
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31045 / 20279 / 7897
Регистрация: 22.10.2011
Сообщений: 35,179
Записей в блоге: 6
27.05.2015, 14:35 7
Цитата Сообщение от Vadim954 Посмотреть сообщение
Ошибка не из за size.
Чтобы убедиться в этом - вызови ShowModal вот так:
Pascal
7
8
    size := Form2.Showmodal; // <---
    setlength(but, size);
, и отпишись о результатах...
0
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 11
28.05.2015, 05:17  [ТС] 8
Так же зависает, а потом пишет что вызвал класс исключения External SIGSEVG по адресу 5C7098

Добавлено через 14 часов 2 минуты
Ну так что мне с этим делать?
0
567 / 522 / 200
Регистрация: 24.01.2012
Сообщений: 1,280
28.05.2015, 08:35 9
Лучший ответ Сообщение было отмечено Vadim954 как решение

Решение

замени until d=HorBut-1; на until d>=HorBut-1;

Добавлено через 28 минут
И еще: цикл, который должен определить по количеству кнопок, сколько кнопок в строке и сколько строк - делает что угодно, но только не это. Вот цикл, который хоть как-то будет делить кнопки на строки с столбцы.
Pascal
1
2
3
4
5
           for VertBut:=ROUND(sqrt(size)) downto 1 do
             if size mod VertBut =0 then  begin
               HorBut:=size div vertbut;
               break;
             end;
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31045 / 20279 / 7897
Регистрация: 22.10.2011
Сообщений: 35,179
Записей в блоге: 6
28.05.2015, 09:37 10
Цитата Сообщение от Vadim954 Посмотреть сообщение
Ну так что мне с этим делать?
Уже было сказано: либо искать ошибку самому, либо показывать проект. Ну, или идти на форум телепатов, они сами разберутся, что у тебя не так, без проекта, и выложат решение на блюдечке с голубой каемочкой. Или не выложат, а протелепатируют в ответ. Кто сумеет - тот поймет в чем ошибка...
0
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 11
28.05.2015, 09:42  [ТС] 11
Помогло,спасибо.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31045 / 20279 / 7897
Регистрация: 22.10.2011
Сообщений: 35,179
Записей в блоге: 6
28.05.2015, 09:55 12
Угу. Помогло. Залепил пробоину в корпусе пластилином. Завтра опять придешь, течь даст обязательно... Ну, дело твое... Хочешь барахтаться в луже вместо выхода в открытое море, но гордо, не показывая свой проект (можно подумать, он кому-то нужен) - барахтайся дальше...

Скучно. От темы отписываюсь...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2015, 09:55

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Намертво виснет ноутбук при выполнении ресурсоёмких задач
Привет! Столкнулся с такой проблемой. На ноуте стоит Win8, недавно был замечен неприятный момент....

При нагрузке намертво зависает пк
Конфигурация: i7 6700(Zalman cnps10xperfoma+) ASUS Z170P MSI Radeon R9 380 2G Radeon R7 8gb...

Намертво зависает при запуске 3D
Купил я себе Б/У видеокарту GTX 650 TI Boost (перед покупкой продавец скинул видео с стресс тестом...

При установке 8 ГБ ОЗУ ПК зависает намертво
Добрый день вот такая ситуация есть пк с материнкой...


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

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

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