Сейчас на форуме: hgdagon, asfa (+3 невидимых)

 eXeL@B —› Программирование —› указатели в DElphi - HELP plz
Посл.ответ Сообщение


Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 июня 2007 02:00
· Личное сообщение · #1

приветствую всех.
у меня возникла проблема с использованием
указателей, хотя раньше таковых не было.
вот в чём моя проблема:

у меня есть несколько пременных в гл форме типа :

compnts=record
table_file:string;
used:byte;
labs:array[1..255]of TLabeledEdit;
flds:array[1..255]of string;
end;

а дальше один укзатель на этот тип (x:^compnts)

так вот я делаю так
...
x:=@пременной_типа_compnts
(тоесть имею доступ к данным неизвестной пременной_типа_compnts)
иду на другую форму
оттуда вызываю процедуру из гл. формы
возвращаюсь на гл. форму (должен работать с X^),
а данные уже потеряны (всмысле из X^)
...
помогиет пожалуйста



Ранг: 19.1 (новичок), 4thx
Активность: 0.010
Статус: Участник

Создано: 22 июня 2007 02:09
· Личное сообщение · #2

Приведи лучше код, а то не понятно.
В каком модуле Х определяешь? Правильно ли память под стуктуру выделяшь? ну и т.д.




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 июня 2007 02:14
· Личное сообщение · #3

по-моему нет смысла код приводить.
x, определяю в главном модуле, а хотя вот:

...
public
probivon:^compnts;

память выделяю так: new( probivon) ... dispose( probivon)




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 июня 2007 02:18
· Личное сообщение · #4

только new и dispose на ходятся в разных процедурах
(думаю изз-за того что переменная в public гл формы объявлена
я имею на это право)



Ранг: 226.0 (наставник), 67thx
Активность: 0.160
Статус: Участник

Создано: 22 июня 2007 09:45
· Личное сообщение · #5

Program Test;
Uses Windows, ExtCtrls;
Type
compnts=record
table_file:string;
used:byte;
labs:array[1..255]of TLabeledEdit;
flds:array[1..255]of string;
end;

Var X:^compnts;
Z: compnts;

Begin
Z.table_file:='Test !!!';
X:=@Z;
MessageBox(0,PChar(X.table_file),'',0);
End.


Так всё работает. Обьясни толком как у тебя.

NicknamES пишет:
x:=@пременной_типа_compnts

как объявлена пременной_типа_compnts ?
так как в примере выше, или ты её динамически создаешь ?




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 22 июня 2007 10:14
· Личное сообщение · #6

NicknamES пишет:
по-моему нет смысла код приводить.

есть есть, код приведешь и сразу все ясно станет. Какую процедуру вызываешь из второй формы? Всмысле она работает с этим указателем или что? Если ты создаешь компонент(выделяешь под него память), а указатель просто используешь, как указатель на него, то ничего само собой не потеряется ИМХО. Значит где-то косяк..

-----
radio uno in ibisa ...





Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 июня 2007 10:52
· Личное сообщение · #7

SergX, примерно то что ты написал я и имел ввиду,
точнее я предпологал идеентичное, только указатель висит в памяти пока я
на другой форме. Смысл моей проблемы:
У меня есть n таблиц (у каждой есть структура compnts которая уже заполнена) и по ним производиться фильтрация с помощью одного окна, на котором в нужный момент создаётся указатель (new(x)) рисуются TLabeledEdit и указателю присваивается адрес структуры одной из таблиц(одной из перременных типа compnts) . Так вот после прорисовки я вызываю show формы , а там пару кнопок и при нажатии на них они вызывают процедуры из гл. юнита, но форму не закрывают, а по закрытии формы я делаю destroy N число TlabeledEdit и пытаюсь удалить указатель dispose(x).
С указателем работаю так : x^.used и т.д.

вот если надо кину и код, но помогите пожалуйста!!!!!!!!!!!!!!!!!!!!!!!!!!!

и ещё SergX почему в своём примере ты обращался к указателю x.used а не x^.used




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 июня 2007 10:53
· Личное сообщение · #8

все переменные в разделе public главной формы
объявил




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 июня 2007 10:59
· Личное сообщение · #9

так вот при обращении из другой формы к процедурам главной
уже исползуется пременная X^, но данные в ней превращабтся неизвестно во что




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 июня 2007 10:59
· Личное сообщение · #10

вот такая вот проблема




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 22 июня 2007 11:33
· Личное сообщение · #11

NicknamES попробуй такое приведение: Pointer(struct) и Pointer(struct)^

-----
radio uno in ibisa ...





Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 июня 2007 13:08
· Личное сообщение · #12

сейчас попробую



Ранг: 19.1 (новичок), 4thx
Активность: 0.010
Статус: Участник

Создано: 22 июня 2007 15:23
· Личное сообщение · #13

Да явно человек в коде напортачил. Без листинга кода вы тут долго будите базарить.




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 22 июня 2007 16:14
· Личное сообщение · #14

народ, спасибо всем кто
помогал, но вся фишка была в том что
в ООП и так всё на указателях основано
так что я делал линк на линк,
в итоге меня поставил на путь истинный один
знакомый.
OSA - ошибка была в том, что мне надо было не укзатель юзать а переменную того же типа
я думаю вопрос исчерпан.


 eXeL@B —› Программирование —› указатели в DElphi - HELP plz
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати