Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не понятная ситуация с копированием файла


Страницы:   1 2

Coming ©   (2009-03-25 09:36:00) 

Здравствуйте,
помогите пожалуйста разобраться, вот кусочек кода:
 //GetWindowsDirectory(w_dir,30);

 if FileExists('c:\MyFile.exe') then
    begin
       ShowMessage('Exist');
    end
    else
    begin
      CopyFile(PChar(ParamStr(0)), PChar('c:\MyFile.exe'), True);
    end;

так все работает, но если разкаментить первую строку - возникает эксес виолейшн...
Почему так происходит подскажите пожалуйста.


Anatoly Podgoretsky   (2009-03-26 13:37:00) [1]

> Немо  (26.03.2009 13:24:27)  [27]

Экспропреирует.


Anatoly Podgoretsky   (2009-03-26 13:36:00) [2]

> brother  (26.03.2009 7:48:26)  [26]

Серьезен как никогда.


Немо   (2009-03-26 13:24:00) [3]


> не понял, о чем речь?

считает данные соседних участков памяти


brother   (2009-03-26 07:48:00) [4]

а)


Palladin   (2009-03-26 07:48:00) [5]


> brother ©   (26.03.09 05:20) [24]

Анатоль пошутил. )


brother   (2009-03-26 05:20:00) [6]

> Потому что переменная всего четыре байта размером, значит
> придется занимать от соседних.

не понял, о чем речь?


Anatoly Podgoretsky   (2009-03-25 15:09:00) [7]

> brother  (25.03.2009 14:57:22)  [22]

Потому что переменная всего четыре байта размером, значит придется занимать от соседних.


brother   (2009-03-25 14:57:00) [8]

> Хватит, но не надолго, плохо кончится.

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


Anatoly Podgoretsky   (2009-03-25 14:55:00) [9]

> brother  (25.03.2009 13:29:20)  [20]

Хватит, но не надолго, плохо кончится.


brother   (2009-03-25 13:29:00) [10]

> И w_dir наверно w_dir: array [0..255] of char;

нет, просто думал что данного буфера должно хватить всегда...


Anatoly Podgoretsky   (2009-03-25 13:22:00) [11]

> brother  (25.03.2009 11:36:18)  [18]

И w_dir наверно w_dir: array [0..255] of char;


brother   (2009-03-25 11:36:00) [12]

> //GetWindowsDirectory(w_dir,30);

всегда писал: GetWindowsDirectory(w_dir,255);


Coming   (2009-03-25 09:53:00) [13]

Большое всем спасибо за помощь:)


Palladin   (2009-03-25 09:51:00) [14]


> непостежимо

не стегай свой ум ) он пока еще этого не заслуживает, в силу своей адекватности


Юрий Зотов   (2009-03-25 09:50:00) [15]

> Coming   (25.03.09 09:47) [10]

Нет, здесь ничего не выделяется. Здесь функции GetWindowsDirectory передаются:
- указатель на якобы выделенный блок памяти;
- размер этого якобы выделенного блока.


Немо   (2009-03-25 09:50:00) [16]

GetMem(w_dir, MAX_PATH + 1);
GetWindowsDirectory(w_dir, MAX_PATH);
FreeMem(w_dir);


> Проблема в w_dir - либо мусор, либо память не выделена,
> либо размер выделенной памяти < 30 байт

читал, что 100 с чем-то.. как узнать почему 30?


Palladin   (2009-03-25 09:49:00) [17]


> Coming   (25.03.09 09:47) [10]

Нет конечно. За, редкостным исключением, API функции не выделяют память.


Coming   (2009-03-25 09:49:00) [18]

И еще совершенно непостежимо для моего ума почему если добавить снизу ShowMessage(w_dir); - никаких ошибок не возникает...


Юрий Зотов   (2009-03-25 09:47:00) [19]

> Coming   (25.03.09 09:44) [8]

> Как ее правильно выделить в таком случае?

GetMem(...);
try
 ...
finally
 FreeMem(...);
end;


Coming   (2009-03-25 09:47:00) [20]

как бы в орешник не попасть)))

GetWindowsDirectory(w_dir,100); - разве тут не выделяется 100 байт под возвращаемую строку?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо