Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Проблема с динамическими массивами в Делфях

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Проблема с динамическими массивами в Делфях
Имя
Сообщение << Старые топики   Новые топики >>
Проблема с динамическими массивами в Делфях - 2007-04-08 09:38:55.430000   
Apache

Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000
Дарова народ! Я тут пишу на Делфях программку и столкнулся вот с такой проблемкой:
участок кода выглядит так:
var
stopx:boolean;
procedure TForm1.STARTClick(Sender: TObject);
type
Tmy: array of тип;
var
массив:TMy;  
begin
stopx:=false;
SetLength[массив,длина];
for i:=1 to delta do
begin
 if stopx then
 begin
  break;
  {тут еще несколько операторов}
 end;
 {тут парочка вложенных циклов}
end;
end;
procedure TForm1.STOPClick(Sender: TObject);
begin
stopx:=true
end;
В общем как то так. Мне требовалось, чтобы при нажатии кнопки СТОП, циклы (запущеные кнопкой  СТАРТ  прерывались).
Для этого я как видно ввел логическую переменную, которая при нажатии кнопки принимала значение true и цикл вскоре прерывался.
Но я ловилю сообщение об ошибке. Помогите, как тут поступить (с простыми, нединамическими массивами все работало нормально). Блин я лузер =(8|
Post #: 1
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 10:01:48.326666   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
Так не понятно же, что ты внутри цикла делаешь с массивом
И работет -ли код когда не жмешь на кнопку?
Post #: 2
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 10:20:57.180000   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
quote:

Блин я лузер =(

Заметно .. ты бы хоть код полностью выложил, а то куй поймеш че у тя там
Post #: 3
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 10:38:35.310000   
Apache

Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000
Ну вот, хотел как проще, получилось как всегда )). Вот код
procedure TForm1.STARTClick(Sender: TObject); type &nbsp; TFocket = array of TSOCKET; &nbsp; Tbusy = array of boolean; &nbsp; Tport = array of integer; var &nbsp;i,j,s, opt, index: Integer; &nbsp;FSocket: TFocket; &nbsp;busy&nbsp;&nbsp; : TBusy; &nbsp;port&nbsp;&nbsp; : TPort; &nbsp;addr&nbsp;&nbsp; : TSockAddr; &nbsp;hEvent : THandle; &nbsp;fset&nbsp;&nbsp; : TFDset; &nbsp;tv&nbsp;&nbsp;&nbsp;&nbsp; : TTimeval; &nbsp;tec&nbsp;&nbsp;&nbsp; :PServEnt; &nbsp;PName:String; &nbsp;GInitData : TWSADATA; begin &nbsp; STOP.Enabled:=true; &nbsp; stopx:=false; &nbsp; Animate1.Active:=true; &nbsp; START.Enabled:= false; &nbsp;ProgressBar1.Min:=StrToInt(p1.Text); &nbsp;ProgressBar1.Max:=StrToInt(p2.Text); &nbsp;SetLength(FSocket,StrToInt(Edit1.Text)); &nbsp;SetLength(busy,StrToInt(Edit1.Text)); &nbsp;SetLength(port,StrToInt(Edit1.Text)); &nbsp;WSAStartup(MAKEWORD(2,0), GInitData); &nbsp;i:=StrToInt(p1.Text); &nbsp;addr.sin_family := AF_INET; &nbsp;addr.sin_addr.s_addr := INADDR_ANY; &nbsp;addr.sin_addr := LookupName; &nbsp;index:=StrToInt(Edit1.Text); &nbsp;hEvent := WSACreateEvent(); &nbsp;while i&lt;StrToInt(p2.Text) do &nbsp; begin &nbsp;&nbsp; for j:=0 to index do &nbsp;&nbsp;&nbsp; busy[j]:=false; &nbsp;&nbsp; if stopx then &nbsp;&nbsp; begin &nbsp;&nbsp; FSocket:=nil; &nbsp;&nbsp; busy:=nil; &nbsp;&nbsp; port:=nil; &nbsp;&nbsp; break; &nbsp;&nbsp; ProgressBar1.Position:=0; &nbsp;&nbsp; START.Enabled:=true; &nbsp;&nbsp; Animate1.Active:=false; &nbsp;&nbsp; end; &nbsp;&nbsp; for j:=0 to index do &nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp; if i&gt;StrToInt(p2.Text) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index:=j-1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp; FSocket[j] := socket(AF_INET, SOCK_STREAM, IPPROTO_IP); &nbsp;&nbsp;&nbsp;&nbsp; WSAEventSelect(FSocket[j], hEvent, FD_WRITE + FD_CONNECT); &nbsp;&nbsp;&nbsp;&nbsp; addr.sin_port := htons(i); &nbsp;&nbsp;&nbsp;&nbsp; connect(FSocket[j], @addr, sizeof(addr)); &nbsp;&nbsp;&nbsp;&nbsp; Application.ProcessMessages; &nbsp;&nbsp;&nbsp;&nbsp; if WSAGetLastError()=WSAEINPROGRESS then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closesocket (FSocket[j]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; busy[j]:=true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp; port[j]:=i; &nbsp;&nbsp;&nbsp;&nbsp; Inc(i); &nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp; FD_Zero(fset); &nbsp;&nbsp; for j := 0 to index do &nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp; if busy[j] &lt;&gt; true then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FD_SET (FSocket[j], fset); &nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp; Application.ProcessMessages; &nbsp;&nbsp; tv.tv_sec := 1; &nbsp;&nbsp; tv.tv_usec := 0; &nbsp;&nbsp; s:=select (1, nil, @fset, nil, @tv); &nbsp;&nbsp; Application.ProcessMessages; &nbsp;&nbsp; for j := 0 to index do &nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp; if busy[j] then continue; &nbsp;&nbsp;&nbsp;&nbsp; if FD_ISSET (FSocket[j], fset) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s:=Sizeof(Opt); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; opt:=1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getsockopt(FSocket[j], SOL_SOCKET, SO_ERROR, @opt, s); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if opt=0 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tec := getservbyport(htons(Port[j]),'TCP'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if tec=nil then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PName:='Unknown' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PName:=tec.s_name; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rich.Lines.Add('Port: '+IntToStr(Port[j])+' | '+Pname+' | '+'open'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp; closesocket(FSocket[j]); &nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp; ProgressBar1.Position:=i; &nbsp; end; &nbsp;WSACloseEvent(hEvent); &nbsp;Animate1.Active:=false; &nbsp;ProgressBar1.Position:=0; &nbsp;START.Enabled:= true; end; procedure TForm1.STOPClick(Sender: TObject); begin STOP.Enabled:=false; stopx:=true end;
Post #: 4
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 10:48:20.236666   
NEFFboy

Сообщений: 204
Оценки: 0
Присоединился: 2007-03-18 11:11:02.040000
что бы небыло ошибки, можешь заключить код в обработчик
try execpt end
а вообще не отлавливать исключения - есть дурной тон.
Post #: 5
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 10:59:43.240000   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
хех,
quote:

while (i&lt;StrToInt(p2.Text)) and (not stopx) do
Post #: 6
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 11:02:13.430000   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
quote:


FSocket:=nil;
busy:=nil;
port:=nil;
break;

фтопку
Post #: 7
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 11:28:04.486666   
Apache

Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000


quote:


FSocket:=nil;
busy:=nil;
port:=nil;
break;

Хм.. А это как сюды попало?
Post #: 8
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 11:35:47.800000   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000

quote:

ORIGINAL: Apache

quote:


FSocket:=nil;
busy:=nil;
port:=nil;
break;

Хм.. А это как сюды попало?

Тебе виднее :) из за этого и ошибка вылетала
Post #: 9
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 11:41:57.070000   
Apache

Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000
Неа это я потом добавлял,  не из за ентого
Post #: 10
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 11:42:45.396666   
NightmareZz

Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
Ужос. Не понимаю, как можно писать говнокод, в котором потом сам не можешь разобраться.
Post #: 11
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 18:36:07.900000   
Apache

Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000
Учись
Разобраться то могу!
Post #: 12
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 18:38:01.966666   
Apache

Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000
Млин ругать каждый может, а вот подсказать….
Post #: 13
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 22:58:51.783333   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
Ну, а трасса что говорит?


Post #: 14
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Проблема с динамическими массивами в Делфях







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.