![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка [D7, XP]
lobach © (2006-10-05 13:27:00)Еще вопросик, что означает ошибка:
'Access violation at address 004522EC in module 'Project1.exe'. Read of address FFFFFFFD'
Ketmar (2006-10-06 12:54:00) [1]>[21] lobach(c) 6-Oct-2006, 05:09
не дошло. за метлой, за метлой...
Desdechado (2006-10-06 11:34:00) [2]function ExtractFileExt(const FileName: string): string;
Наиль (2006-10-06 08:41:00) [3]Дополнение к [22]
FindFirst(Dir + '*.*', faAnyFile, SR) может вернуть файл с названием '.' (точка) какое значение должно пренять ext.
> Дошло, мать вашу!!!! :)
Ничего до тебя не дошло. Пока ты не ответишь на [18], работать не будет.
Percent (2006-10-06 05:16:00) [4]ext:= SR.Name[Length(SR.Name)-2] + SR.Name[Length(SR.Name)-1] + SR.Name[Length(SR.Name)];
А у меня файл называется "Картинка.jpeg".
И еще много файлов вообще без расширения.
Что делать будем?
lobach (2006-10-06 05:09:00) [5]Дошло, мать вашу!!!! :)
if Length(SR.Name) > 3 then begin
ext:= SR.Name[Length(SR.Name)-2] + SR.Name[Length(SR.Name)-1] + SR.Name[Length(SR.Name)];
end;
Ketmar (2006-10-05 22:34:00) [6]>[18] DrPass(c) 5-Oct-2006, 22:10
>Дык, надо не просто читать, а еще и думать при
>этом :)
судя по всему, неко на это не сопсобно...
oxffff (2006-10-05 22:26:00) [7]
> @!!ex © (05.10.06 13:38) [7]
>
> > oxffff © (05.10.06 13:33) [5]
>
> Да, конечно. :)
> Согласен, не корректно написал с точки зрения резервирования
> памяти в ОС.
> Но ИМХо так ему понятнее будет.
> Не объяснять же, что есть память отвденная для нужд ОС(куда
> он собственно и сунулся) и что есть память выделенная для
> собственно данных.
>
> P.S.
> Инициализированная область памяти - это та область памяти,
> которая была зарезервирована программой, например, функцией
> GetMem. :)
Во первых FFFFFFFD виртуальный адрес, который свыше 2GB.
Виртульаные адреса свыше 2GB (3GB при включенной опции) не поступны из RING 3.
Так что здесь возникнет исключение нарушение прав доступа. А не промах страницы.
Так что здесь это не неинициализированая область памяти.
А системная область вируальных адресов явно близко к 4Gb
DrPass (2006-10-05 22:10:00) [8]
> Куда я ваш цикл запихну, он у меня на сложении глючит...
Дык, надо не просто читать, а еще и думать при этом :)
Вот, например, ответь на такой вопрос:
ext:= SR.Name[Length(SR.Name)-2]+SR.Name[Length(SR.Name)-1]+SR.Name[Length(SR.Name)];
Это ты типа расширение так получить собрался, да? (нет, нет, это еще не вопрос!) А как ты думаешь, что будет находиться в строке Name (и какая будет ее длина) в тот момент, когда выполняется эта строчка кода? Это уже вопрос.
Ketmar (2006-10-05 20:23:00) [9]>[14] Palladin(c) 5-Oct-2006, 18:41
>ты вообще читаешь что тебе пишут? или чукча не
>читатель, чукча писатель?
не читает из принципа, судя по всему. за метлой, однозначно.
lobach (2006-10-05 18:47:00) [10]
> Длина SR.Name<2?
Да не должно... Но щас проверю
> ты вообще читаешь что тебе пишут? или чукча не читатель,
> чукча писатель?
Куда я ваш цикл запихну, он у меня на сложении глючит...
ProgRAMmer Dimonych (2006-10-05 18:41:00) [11]Длина SR.Name<2?
Palladin (2006-10-05 18:41:00) [12]ты вообще читаешь что тебе пишут? или чукча не читатель, чукча писатель?
lobach (2006-10-05 18:37:00) [13]Вобщем у меня процедура:
procedure TForm1.FindFile(Dir: string);
var
ext:String;
SR: TSearchRec;
FindRes: Integer;
begin
ext:= SR.Name[Length(SR.Name)-2]+SR.Name[Length(SR.Name)-1]+SR.Name[Length(SR.Name)];
FindRes := FindFirst(Dir + '*.*', faAnyFile, SR);
while FindRes = 0 do
begin
if ((SR.Attr and faDirectory) = faDirectory) and
((SR.Name = '.') or (SR.Name = '..')) then
begin
FindRes := FindNext(SR);
Continue;
end;
if ((SR.Attr and faDirectory) = faDirectory) then
begin
FindFile(Dir + SR.Name + '\\');
FindRes := FindNext(SR);
Continue;
end;
if ext='exe' then begin
ListBox1.Items.Add(SR.Name);
end;
FindRes := FindNext(SR);
end;
FindClose(SR);
end;
Выделяет строку:
ext:= SR.Name[Length(SR.Name)-2]+SR.Name[Length(SR.Name)-1]+SR.Name[Length(SR.Name)];
Помогите
MsGuns (2006-10-05 14:18:00) [14]>clickmaker © (05.10.06 13:42) [10]
>Для устранения подобных ошибок лучше использовать
>for i := 0 to High(a)
for i := Low(a) to High(a)
Kolan (2006-10-05 13:45:00) [15]А причём тут массив? Или Telepator сработал :)
clickmaker (2006-10-05 13:42:00) [16]Для устранения подобных ошибок лучше использовать
for i := 0 to High(a)
Kolan (2006-10-05 13:40:00) [17]Для устранения подобных ошибок. Используют "детекторы утечек". Для D7 я пользовался MemProof.
@!!ex (2006-10-05 13:40:00) [18]
> ну например, ты объявил массив а:array[1..10] of Integer,
> а пытаешься в программе обратиться к a[12]. Тогда у тебя
> выйдет такая ошибка...
Не факт.
@!!ex (2006-10-05 13:38:00) [19]
> oxffff © (05.10.06 13:33) [5]
Да, конечно. :)
Согласен, не корректно написал с точки зрения резервирования памяти в ОС.
Но ИМХо так ему понятнее будет.
Не объяснять же, что есть память отвденная для нужд ОС(куда он собственно и сунулся) и что есть память выделенная для собственно данных.
P.S.
Инициализированная область памяти - это та область памяти, которая была зарезервирована программой, например, функцией GetMem. :)
pavel_guzhanov (2006-10-05 13:37:00) [20]
> А что есть инициализированные области?
ну например, ты объявил массив а:array[1..10] of Integer, а пытаешься в программе обратиться к a[12]. Тогда у тебя выйдет такая ошибка...