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

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

не работает getmem


Страницы:   1 2

Евгений007 ©   (2010-11-03 13:14:00) 

Доброго времени!
Подскажите кто может:
не работает getmem
свел код к нескольким строкам

getmem()
if isBadWritePtr() выдает ошибку

с чем это может быть связано?
Настройки?
У меня дельфи 6

Евгений


Евгений07   (2010-11-03 15:18:00) [21]

Я понимаю, что не должна быть ошибка!

Могут ли повлиять настройки компилятора?

Конфликт с устройствами
(видеокарта)???

Основная программа (чужая) так и работает
= ядро и ДЛЛки

То что оттранслировано у меня дает ошибки


sniknik   (2010-11-03 15:17:00) [22]

похоже сейчас будет путевка в жизнь еще одному дворнику...

Евгений07
ты вообще код на который "грешишь" сам проверял? вне своей глючной программы. ну так проверь, сделай пустой проект, положи кнопку на форму, скопипасть показываемый код... где ошибка? пальцем покажи.


Сергей М.   (2010-11-03 15:08:00) [23]


> Евгений07   (03.11.10 14:57) [11]


Ты чего какой трудный ?


> GetMem(l1, 519);                        //ошибка появляется
> здесь


Да нет здесь никакой ошибки, сколько еще раз надо повторить ?)
Если бы она была, ты не увидел результатов работы ни одной из последующих строчек своего кода.


RWolf   (2010-11-03 15:03:00) [24]

у меня не выдаёт.


Евгений07   (2010-11-03 14:57:00) [25]

l2 := l1;             //  стр1

сорри, это уже мандраж
Код:

procedure TForm11.Gt();  
var
i, kol: integer;
l1, l2: Pointer;
//  l1, l2: fx;
begin
 GetMem(l1, 519);                        //ошибка появляется здесь
 Memo1.Lines.Add(Format(' 101  p %p', [l1]));  //печатает
  ZeroMemory(l1, 519);       //выполняется правильно
  GetMem(l2,  519);                        //ошибка появляется здесь
  FillMemory(l2, 519, 1);     //выполняется правильно
  Memo1.Lines.Add(Format(' 102  p %p', [l2]));   //печатает
  CopyMemory (l2, l1, 519);    //выполняется правильно
  FillMemory(l1, 519, 2);      //выполняется правильно
  FreeMem(l1, 519);
  l1 := nil;
  FreeMem(l2, 519);  
  l2 := nil;                            
end;

после завершения программы выдает
Access violation at adress 01A... in module XX write of adress 01D...


Сергей М.   (2010-11-03 14:52:00) [26]


> Евгений07   (03.11.10 14:32) [7]


GetMem(l1, 519);                        // <-здесь нет никакой ошибки , если
Memo1.Lines.Add(Format(' 101  p %p', [l1]));  //<- если "это" у тебя "печатает"


clickmaker   (2010-11-03 14:36:00) [27]

> l2 := l1;             //  стр1

зачем это?


12   (2010-11-03 14:35:00) [28]


> l2 := l1;             //  стр1

что это?


Евгений07   (2010-11-03 14:32:00) [29]

Код:

procedure TForm11.Gt();  
var
i, kol: integer;
l1, l2: Pointer;
//  l1, l2: fx;
begin
  GetMem(l1, 519);                        //ошибка появляется здесь
  Memo1.Lines.Add(Format(' 101  p %p', [l1]));  //печатает
   ZeroMemory(l1, 519);       //выполняется
   GetMem(l2,  519);                        //ошибка появляется здесь
   FillMemory(l2, 519, 1);     //выполняется
   Memo1.Lines.Add(Format(' 102  p %p', [l2]));   //печатает
   CopyMemory (l2, l1, 519);    //выполняется
   FillMemory(l1, 519, 2);      //выполняется
   l2 := l1;             //  стр1
   FreeMem(l1, 519);
   l1 := nil;
   FreeMem(l2, 519);  //выводит invalid point operator если есть стр1
   l2 := nil;                            

end;

IsBadReadPtr применил для локализации

Без стр1 после завершения программы выдает все то же
Access violation at adress 01A... in module XX write of adress 01D...

<Цитата>


clickmaker   (2010-11-03 14:28:00) [30]

> if IsBadReadPtr(l1, 519) then                   //уже есть
> ошибка
>         Memo1.Lines.Add(Format(' 110  p %p', [l1])); //=это
> не печатает

если не печатает, значит он не Bad, то есть Good. В чем тогда ошибка-то?


Сергей М.   (2010-11-03 14:25:00) [31]


>    GetMem(l1, 519);                        //ошибка появляется
> здесь
>    Memo1.Lines.Add(Format(' 101  p %p', [l1]));  //печатает


Если "печатает", значит нет никакой "ошибки".


12   (2010-11-03 14:18:00) [32]

http://msdn.microsoft.com/en-us/library/aa366716%28VS.85%29.aspx
функция является устаревшей и не должны использовать
и потом
If the application is run under a debugger ...

а в IDE разве не под debugger оно run?


Евгений007   (2010-11-03 14:12:00) [33]

Код:

procedure TForm11.Gt();  
var
 i, kol: integer;
 l1, l2: Pointer;
//  l1, l2: fx;
begin
   GetMem(l1, 519);                        //ошибка появляется здесь
   Memo1.Lines.Add(Format(' 101  p %p', [l1]));  //печатает
   if IsBadReadPtr(l1, 519) then                   //уже есть ошибка
         Memo1.Lines.Add(Format(' 110  p %p', [l1])); //=это не печатает
end;

Это вырезка на поиск ошибки

В DLL после записи из основного модуля в мою переменную выдавала ошибку
Access violation at adress 01A... in module XX write of adress 01D...


clickmaker   (2010-11-03 13:29:00) [34]

> if isBadWritePtr() выдает ошибку

разумеется, секретную


CrytoGen   (2010-11-03 13:25:00) [35]

Приведите код


Страницы:   1 2

Наверх

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