![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Geniebal |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.5.2010 Репутация: нет Всего: нет |
Здравствуйте!
Для передачи динамического массива между функциями хотелось бы использовать указатели. Ниже код:
функции :
и
в функциях PArray это
Собственно причина моего сообщения: после 2-х успешных разов завершения функции Residen_atribute (т.е. память выделяется, массив заполняется и т.д.), прохождение функции Non_Resident завершается ошибкой связаной с обращением к недоступному участку памяти! (Строка, где ывылетает эта ошибка помечена комментарием в коде) Мб я что то не правильно делаю?:( помогите плз, а то всю голову сломал уже... |
||||||||
|
|||||||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
Отдели мух от котлет.
Не используй дин.массивы и ручное выделение памяти. p.s. Либо объяви
Это сообщение отредактировал(а) MetalFan - 16.11.2011, 09:14 -------------------- There are always someone smarter than you... |
|||
|
||||
Geniebal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.5.2010 Репутация: нет Всего: нет |
а как тогда передавать данные типо массива? я заранее не знаю, сколько будет данных.
не получится Это сообщение отредактировал(а) Geniebal - 16.11.2011, 09:29 |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
Почему? отключаем Range Checking и все должно работать. Это сообщение отредактировал(а) MetalFan - 16.11.2011, 09:43 -------------------- There are always someone smarter than you... |
|||
|
||||
Geniebal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.5.2010 Репутация: нет Всего: нет |
Всмысле
если я тупо пишу TArray = array [0..0] of byte, то выдается ошибка типо - попытка обратится к элементу массива вне его диапазона. и насколько я понимаю TArray = array [0..0] of byte это массив на 1 элемент. или я опять что то путаю? |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
мм... счас, накидаю пример.
Смысл в том, что используется указатель на массив с как бы одним элементом, но ничего не мешает обратиться к элементам с другими индексами по указателю на такой массив. Это сообщение отредактировал(а) MetalFan - 16.11.2011, 10:31 -------------------- There are always someone smarter than you... |
|||
|
||||
Geniebal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.5.2010 Репутация: нет Всего: нет |
сделал как ты написал, получилось равноценно тому что было в начале у меня - ошибка с обращением хз куда
|
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
Ну ищи тогда ошибку в своем коде.
Твой подход по работе с указателем на дин.массив в корне неверный. Предложенный мной подход вполне жизнеспособен. Видимо где-то вылет за границы выделенной памяти или нечто подобное. -------------------- There are always someone smarter than you... |
|||
|
||||
Geniebal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.5.2010 Репутация: нет Всего: нет |
Почему? Делаем указатель - выделяем память на определенный размер - образаемся к памяти через указатель как к массиву... Что не правильно? |
|||
|
||||
CodeMonkey |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
http://www.gunsmoker.ru/2009/01/blog-post.html - аж 4 варианта кода.
Добавлено через 3 минуты и 55 секунд
Можно как-то так:
Мог ошибиться на единичку в правой границе, но смысл понятен. Добавлено через 6 минут и 13 секунд
Потому что ты не выделил память под массив. Ты выделили память под данные массива. Наводящий вопрос: где хранится число, сколько элементов в массиве? Учим мат-часть: http://www.transl-gunsmoker.ru/2009/09/blog-post.html -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||||
|
|||||||
Geniebal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.5.2010 Репутация: нет Всего: нет |
При выделении мы же указываем требуемый размер? или это не то? и тогда просто гениальный вопрос: почему АНАЛОГИЧНАЯ функция Resident_atribute РАБОТАЕТ? |
|||
|
||||
CodeMonkey |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Читай мат-часть по указанным ссылкам. Динамический массив - это не блок памяти. Динамический массив имеет служебный заголовок, который ты игнорируешь.
Так кубики выпали. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||
|
|||||
Geniebal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.5.2010 Репутация: нет Всего: нет |
Спасибо! Разобрался.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |