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-05 12:46:00) [1]

Доброго времени от талантливого дворника
Как всегда кино закончилось на самом интересном месте)
Нашел все ляпы
Серия 1 = исходная
В ДЛЛ было
0.задание переменной формы = структура
 а. количество фрагментов
 б. динамический массив фрагментов
1.запрос на количество фрагментов
2.выделение памяти GetMem для запрошенного количества фрагментов
3.запрос фрагментов
4. Ошибка
Серия 2 = выделение ошибки
1. создал проект, как мне казалось имитирующий ошибку:
 а. форма
 б. выдранный кусок из описания структур данных
2. процесс умучивания = получить исходную ошибку
Серия 3 = обсуждение полученного с не талантливыми дворниками
1. наиболее точно, как мне казалось, описал проблему в этой дискуссии

                Грабли талантливого дворника

Конец Серии 3
подменил в задании переменной = структуру на Pointer
Получил = l1, l2: Pointer;
Ну нету у меня сейчас дома нормального интернету!
Естественно - тут ошибки нету!
Конец Серии 2
в процессе мутации программы с целью получить исходную ошибку упростил исходную структуру
Получил:
1. Конструктор создает переменную типа структура
2. талантливый дворниктоже GetMem переменную типа структура
3. талантливый дворникзатем FreeMem эту переменную
4. и наконец деструктор тоже пытается уничтожить эту переменную!
Результат = ошибка, но не та!
Конец Серии 1
После весьма значительного увеличения памяти, скрывшей адрес возникновения записи, ошибка исчезла
Судя по всему описание доступного мне интерфейса ДЛЛ и реального не соответствуют


Anatoly Podgoretsky   (2010-11-03 16:52:00) [2]

> Евгений07  (03.11.2010 16:15:30)  [30]

Забудь про указатели, это не твое.


Anatoly Podgoretsky   (2010-11-03 16:48:00) [3]

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

Зря ты реальное сообщение заменил троеточием.


Юрий Зотов   (2010-11-03 16:35:00) [4]

> Евгений07

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


Сергей М.   (2010-11-03 16:35:00) [5]


> срочный вылет


Ну вот)
Как всегда кино закончилось на самом интересном месте)


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

Спасибо за дискуссию, извините, срочный вылет


sniknik   (2010-11-03 16:10:00) [7]

> Так надо понимать ?)
надо понимать еще один талантливый дворник пропадает... незамутненное логикой сознание.


Сергей М.   (2010-11-03 16:03:00) [8]


> у меня в компе возможна какая то бяка с распределением памяти


Т.е. это умозаключение ты сделал на основании того что в результате  выполнении вызова GetMem() ты увидел на экране сообщение дословно следующего содержания "У тебя в компе какая то бяка с распределением памяти" ?)

Так надо понимать ?)


sniknik   (2010-11-03 15:59:00) [9]

> где ошибка? пальцем покажи после завершения программы выдает Access violation at adress 01A... in module XX write of adress 01D...
НЕТ, в ПОКАЗАННОМ КОДЕ. а не отсебятине какой то, сам приписал...

СОВЕРШЕННО НЕ ИНТЕРЕСНО ТО, ЧТО "ОСТАЛОСЬ ЗА КАДРОМ", не показано.


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

Ну и чему верить ?
Если я явно распределяю память через массивы, все работает правильно.
Есть довольно большой проект, с кучей больших массивов = нет проблем
Проблемы появляются с применением GetMem

Все указывает на то что у меня в компе возможна какая то бяка с распределением памяти.

Как это можно проверить?


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

> 1, в ДЛЛ был примерно такой код
откуда вдруг dll взялась? нет в [0], и в коде никаких dll...

но теперь хоть понятно, разные менеджеры памяти, а ты судя по всему, в 17-й строке передаешь переменные/лезешь в области  не принадлежащие программе/dll.
прочитай внимательно предупреждение которое когда создаешь dll в ней вначале стоит.


clickmaker   (2010-11-03 15:55:00) [12]

> l1 := nil;
>   l2 := nil;  

и вот это, интересно, зачем?


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

выложи архив с исходниками проекта — скомпилируем, проверим.


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

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


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


> Евгений07   (03.11.10 15:36) [18]


Сначала ты утверждаешь, что


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


Теперь ты разворачиваешь оглобли на 180 градусов и заявляешь что


> GetMem(l2,  к * 519);                       //выполняется  правильно


Ну и чему верить ?)


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


> Евгений07   (03.11.10 15:36) [18]
> сделал пост 11

я тоже сделал — нет ошибки.


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


> Евгений07   (03.11.10 15:18) [15]
> Я понимаю, что не должна быть ошибка!Могут ли повлиять настройки
> компилятора?

Может повлиять несоблюдение соглашений по обмену данными с основной программой.


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

Трудность выползла так:
1, в ДЛЛ был примерно такой код

GetMem(l2,  к * 519);                       //выполняется правильно

запрос_к_ядру_на_получение_ данных()    //ошибка появляется здесь
// Access violation at adress 01A... in module XX write of adress 01D...    
// в отладчике
2, сделай пустой проект, положи кнопку на форму, скопипасть показываемый код...= сделал пост 11
память выделяется, заполняется, копируется правильно

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


sniknik   (2010-11-03 15:30:00) [19]

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


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


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


Ну так ее и нет !
С какого перепугу ты утверждаешь что она есть, да еще и до сих пор никому не известно какая ?)


Страницы:   1 2

Наверх

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