Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Массивы и указатели. Что я делаю не так?   Найти похожие ветки 

 
noob_one   (2011-01-19 13:35) [0]


type
 TImportField=record
        Displaylabel, FieldName: ShortString;
        DefNum,ColNum:Integer;
 PImportField=^TImportField;

 TImportFieldList=array of TImportField;

var
ImportFields:TImportFieldList;

Function GetImportFieldByFieldName(const FieldName:string):PImportField;
var
 L,I: Integer;
begin
Result:=nil;
L:=Length(ImportFields);
for I := 0 to L - 1 do
 if ImportFields[I].FieldName=FieldName
  then
   begin
    Result:=@ImportFields[I];
    Exit;
   end;
end;

Функция используется для доступа к элементу массива по FieldName.
Чтение проходит хорошо, запись проходит без ошибок, но записанное значение попадает.

Обычно это значит что работа идет с копией элемента, но насколько я понимаю запись Result:=@ImportFields[I]; дожна возвращать ссылку.

Что не так и как правильно?


 
Palladin ©   (2011-01-19 14:01) [1]

record без end

что ты знаешь о динамических массивах?


 
12 ©   (2011-01-19 14:51) [2]

все работает

Function GetImportFieldByFieldName(const FieldName:string):PImportField;
var
L,I: Integer;
begin
Result:=nil;
L:=Length(ImportFields);
for I := 0 to L - 1 do
if ImportFields[I].FieldName=FieldName then
  begin
   Result:=@ImportFields[I];
   Exit;
  end;
end;

procedure TForm1.btn1Click(Sender: TObject);
var
 P: PImportField;
 i: integer;
 s:string;
begin
  SetLength(ImportFields, 5);
  ImportFields[0].FieldName := "000";
  ImportFields[1].FieldName := "111";
  ImportFields[2].FieldName := "111";
  ImportFields[3].FieldName := "222";
  ImportFields[4].FieldName := "999";
  s:="";
  for i:= 0 to 4 do S:=s+ImportFields[i].FieldName+" ";
  ShowMessage( s );

  P := GetImportFieldByFieldName("111");
  P.FieldName := "563";

  P := GetImportFieldByFieldName("222");
  P.FieldName := "asd";

  s:="";
  for i:= 0 to 4 do S:=s+ImportFields[i].FieldName+" ";
  ShowMessage( s );
end;


 
noob_one   (2011-01-19 15:16) [3]

> [2] 12 ©   (19.01.11 14:51)

Спасибо что попробовали и проверили.
Значит у меня где-то еще ошибка. Буду искать.


 
12 ©   (2011-01-19 15:57) [4]

области видимости проверьте


 
KSergey ©   (2011-01-20 09:44) [5]

> 12 ©   (19.01.11 15:57) [4]
> области видимости проверьте

Есть подозрение, что у автора "попадает" после добавления элементов в массив. Что естественно.

Автор, зачем вы всех обманываете? в приведенном примере, я уверен, ничего никуда не пропадает. Это не полный пример пропадания.

> 12 ©   (19.01.11 14:51) [2]
> все работает

Если перед последним end; добавить две строчки

SetLength(ImportFields, 100);
ShowMessage( P.FieldName );


то легко может и рвануть, и правильно.


 
noob_one   (2011-01-20 11:07) [6]

> Автор, зачем вы всех обманываете? в приведенном примере,
> я уверен, ничего никуда не пропадает. Это не полный пример
> пропадания.


Да, но весь пример работы слишком большой.
Как выяснилось уже ближе к ночи, я забыл напрочь про еще одно событие, в котором было еще одно присваивание.

>Если перед последним end; добавить две строчки
Не-не, сначала инициализация, потом указатели.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.075 c
2-1335292096
artemchik
2012-04-24 22:28
2013.03.22
настройка Delphi


2-1338406764
well
2012-05-30 23:39
2013.03.22
CBuilder 6 Отображение немецких символов в TEdit


15-1341336305
alexdn
2012-07-03 21:25
2013.03.22
Фон для штмл странички


2-1331843715
Zheksonz
2012-03-16 00:35
2013.03.22
Управление шаговым двигателем через LPT


15-1347788277
Pavia
2012-09-16 13:37
2013.03.22
Посоветуйте СУБД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский