![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
p [c] := 0; -> РћРЁР?Р’РљРђ Kernel32.dll [D5, WinME]
Sectey © (2002-07-23 15:30:00)Заранее благодарен за любой ответ.
Проблема:
В основной программе создаю новый поток.
В котором выполняю вызов DOS программ через CreateProcess
в нем организовываю цикл ожидания
while WaitForSingleObject(Fpi.hProcess, 100) <> WAIT_OBJECT_0 do
begin
// ...
if c > 8191 then // ограничения на размер данных
c := 8191;
p[c] := #0; // <- Ошибка
// ...
end;
Если где то в этом цикле организую вручную запись в память
p[c] := ... , при этом не имеет значение выделена она в этом
потоке или в основном, автотомарически p : array[0..8192] of char или динамически GetMem(p, 8193);
Просто в процессе выполнения программы сообщаем об ошибке "Программа Project1 вызвала ошибку KERNEL32.DLL."
Убираю данную строку все Ок.
Большое спасибо Sectey
Sectey (2002-07-23 17:28:00) [1]Спасибо всем кто откликнулся!
Я понел, что если прозвожу чтение из файла, а после произвожу операции с памятью, то выходит ОШИБКА.
Конечно решение через Ж... , но если переходим в основной поток то все работает хорошо.
ZZ (2002-07-23 17:01:00) [2]или полный код давай или сам пошагово последи за выполнением программы.
ЗЫ. А как массив передается в потоk ?
Alx2 (2002-07-23 16:55:00) [3]Скорее всего, значение p где-то ранее засирается. В итоге теряется адрес массива.
Sectey (2002-07-23 16:39:00) [4]Тоже само если
p[0] := ...
вообще ни имеет значение что писать в память.
Игорь Шевченко (2002-07-23 15:53:00) [5]Как объявлена переменная "с" ?