Форум: "Начинающим";
Текущий архив: 2009.05.10;
Скачать: [xml.tar.bz2];
ВнизНе понятная ситуация с копированием файла Найти похожие ветки
← →
Coming (2009-03-25 09:36) [0]Здравствуйте,
помогите пожалуйста разобраться, вот кусочек кода://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;
так все работает, но если разкаментить первую строку - возникает эксес виолейшн...
Почему так происходит подскажите пожалуйста.
← →
Немо © (2009-03-25 09:39) [1]а если только ее и оставить :)
ведь тоже будет AV?
← →
clickmaker © (2009-03-25 09:39) [2]сильно подозреваю, что память под w_dir не выделяется
← →
Юрий Зотов © (2009-03-25 09:39) [3]Похоже, не выделена память под w_dir.
← →
Сергей М. © (2009-03-25 09:41) [4]Проблема в w_dir - либо мусор, либо память не выделена, либо размер выделенной памяти < 30 байт
← →
Coming (2009-03-25 09:42) [5]Вы правы.
Только вот если добавить:GetWindowsDirectory(w_dir,100);
ShowMessage(w_dir);
все работает:)
← →
Palladin © (2009-03-25 09:42) [6]ну раз никто еще этого не подсказал, наверное память под w_dir не выделена :)
← →
Palladin © (2009-03-25 09:43) [7]
> все работает:)
ну по встречке тоже можно иногда ездить... недолго правда...
← →
Coming (2009-03-25 09:44) [8]Как ее правильно выделить в таком случае?
← →
Palladin © (2009-03-25 09:45) [9]То есть, ты уже как-то выделяешь, но думаешь, что как-то не правильно?
← →
Coming (2009-03-25 09:47) [10]как бы в орешник не попасть)))
GetWindowsDirectory(w_dir,100); - разве тут не выделяется 100 байт под возвращаемую строку?
← →
Юрий Зотов © (2009-03-25 09:47) [11]> Coming (25.03.09 09:44) [8]
> Как ее правильно выделить в таком случае?
GetMem(...);
try
...
finally
FreeMem(...);
end;
← →
Coming (2009-03-25 09:49) [12]И еще совершенно непостежимо для моего ума почему если добавить снизу ShowMessage(w_dir); - никаких ошибок не возникает...
← →
Palladin © (2009-03-25 09:49) [13]
> Coming (25.03.09 09:47) [10]
Нет конечно. За, редкостным исключением, API функции не выделяют память.
← →
Немо © (2009-03-25 09:50) [14]GetMem(w_dir, MAX_PATH + 1);
GetWindowsDirectory(w_dir, MAX_PATH);
FreeMem(w_dir);
> Проблема в w_dir - либо мусор, либо память не выделена,
> либо размер выделенной памяти < 30 байт
читал, что 100 с чем-то.. как узнать почему 30?
← →
Юрий Зотов © (2009-03-25 09:50) [15]> Coming (25.03.09 09:47) [10]
Нет, здесь ничего не выделяется. Здесь функции GetWindowsDirectory передаются:
- указатель на якобы выделенный блок памяти;
- размер этого якобы выделенного блока.
← →
Palladin © (2009-03-25 09:51) [16]
> непостежимо
не стегай свой ум ) он пока еще этого не заслуживает, в силу своей адекватности
← →
Coming (2009-03-25 09:53) [17]Большое всем спасибо за помощь:)
← →
brother © (2009-03-25 11:36) [18]> //GetWindowsDirectory(w_dir,30);
всегда писал: GetWindowsDirectory(w_dir,255);
← →
Anatoly Podgoretsky © (2009-03-25 13:22) [19]> brother (25.03.2009 11:36:18) [18]
И w_dir наверно w_dir: array [0..255] of char;
← →
brother © (2009-03-25 13:29) [20]> И w_dir наверно w_dir: array [0..255] of char;
нет, просто думал что данного буфера должно хватить всегда...
← →
Anatoly Podgoretsky © (2009-03-25 14:55) [21]> brother (25.03.2009 13:29:20) [20]
Хватит, но не надолго, плохо кончится.
← →
brother © (2009-03-25 14:57) [22]> Хватит, но не надолго, плохо кончится.
почему? полный путь врядли будет больше, имхо, не надо длинных имен папок и больших вложенностей...
← →
Anatoly Podgoretsky © (2009-03-25 15:09) [23]> brother (25.03.2009 14:57:22) [22]
Потому что переменная всего четыре байта размером, значит придется занимать от соседних.
← →
brother © (2009-03-26 05:20) [24]> Потому что переменная всего четыре байта размером, значит
> придется занимать от соседних.
не понял, о чем речь?
← →
Palladin © (2009-03-26 07:48) [25]
> brother © (26.03.09 05:20) [24]
Анатоль пошутил. )
← →
brother © (2009-03-26 07:48) [26]а)
← →
Немо © (2009-03-26 13:24) [27]
> не понял, о чем речь?
считает данные соседних участков памяти
← →
Anatoly Podgoretsky © (2009-03-26 13:36) [28]> brother (26.03.2009 7:48:26) [26]
Серьезен как никогда.
← →
Anatoly Podgoretsky © (2009-03-26 13:37) [29]> Немо (26.03.2009 13:24:27) [27]
Экспропреирует.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.05.10;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.005 c