Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Массив записей (проблема с доступом) [Delphi] (https://forum.antichat.xyz/showthread.php?t=191538)

mr. ZetRikS 29.03.2010 20:22

Массив записей (проблема с доступом) [Delphi]
 
Вот собственно суть проблемы есть несколько типов:
Код:

//тип 1
type
  TTMyType1 = Record
  isLinked: SmallInt;
  ToT: string;
  ToC: Integer;
end;

//тип 2
type
  PMyType2 = ^TMyType2;
  TMyType2 = record
  CNa: string;
  CTy: SmallInt;
  isa: SmallInt;
  Sa: TTMyType1;
end;

//тип 3
type
  PMyType3 = ^TMyType3;
  TMyType3 = record
  ExName: string;
  ExParam: array [0..100] of PMyType2;
end;

Вот... далее создаём глобальную переменную типа массив PMyType3, и пытаемся поюзать...

var
qwerty: array [0..10] of PMyType3; //создали массив записей типа PMyType3

и далее где угодно в программе пытаемся поюзать
qwerty[i].ExName:= 'текст_значения';
и так далее, но вот трабл, при таком обращении программка говорит Access violaton бла бла бла, в общем на сколько я понял, объект вроде как есть, но память под него не выделена, хотя он не динамичен, то есть размеры объявлены заранее...

варианты решения проблемы?
заранее спс...

Chrome~ 29.03.2010 22:39

Нужно выделять память с помощью процедуры New, и освобождать с помощью Dispose.
То есть:
Код:

var
  test: PMyType3;
begin
  New(test);
  test.ExName:= 'текст_значения';
  ...
  Dispose(test);
end;

По моему так должно быть, хотя точно не уверен.

maestro-ant 30.03.2010 00:32

Chrome~
Неправильно подсказываешь! Память у него уже выделена.

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

вот так объяви массив
Код:

qwerty: array [0..10] of TMyType3;
и будет все гуд

ЗЫ Пользуйтесь отладчиками

Chrome~ 30.03.2010 01:05

Да нет же, maestro-ant, это ты не умеешь правильно работать с динамической памятью.

Посмотри, как правильно должно быть реализовано в данном случае:

Цитата:

http://slil.ru/28877453
http://rapidshare.com/files/369686671/Test.rar.html

mr. ZetRikS 30.03.2010 01:40

Так и есть, вопрос исчерпан...

правд ещё косяк был, пришлось в типе 3 вместо PMyType2 использовать так же тип, а не указатель на него...

Всегда так работал (за пять лет таких проблем не случалось), а тут подсказали мол лучше использовать указатели на тип... Для чего особо не понял, но вот собственно и парился пару дней, кстати с типом пробовал, но так как в типе 3 есть переменная ууказателя на тип, вот тут косяк и не увидел, только сейчас когда подсказали узрел...

Спасибо что уделили время моей проблеме... поставил + обим...


Время: 01:51