|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.10.2016, 11:22 | #1 | |
Пользователь
Регистрация: 06.07.2008
Сообщений: 91
|
динамическое выделение памяти под структуры
Есть вот такая структура:
Код:
Код:
Код:
Я думаю что нельзя, хотя написал небольшую тестовую программку и всё работает. Но работает я думаю из-за того, что данные структуры занимают очень мало места в памяти и при выделении памяти они все будут в одном месте, поэтому меняя указатель head - head-- или head++ мы будем перемещаться по структурам. Но если бы структуры были очень большими и их было очень много, то, есть вероятность, что одна часть их будет расположена в одном месте, а другая в другом месте памяти и тогда перемещаться по структурам меняя head не получиться. Хотелось бы узнать правильно я думаю или ошибаюсь! Правильно перемещаться по структурам надо наверное так: Код:
Следующий непонятный момент вот какой. После выделения памяти под структуры и поработав с ними, освобождаю память free(head), head в данном случае указывает на самую верхнюю структуру. В интернете вычитал вот что: free Цитата:
Код:
Вот моя небольшая тестовая программка: Код:
Код:
|
|
13.10.2016, 11:59 | #2 | |
Форумчанин
Регистрация: 24.01.2011
Сообщений: 774
|
Цитата:
При выполнении оператора ++ и -- к указателю, происходит перемещение по адресу на размер типа структуры. Ты всё выделяешь в цикле, поэтому у тебя все они рядом. Движение по структуре верно. Для доступа к любому элементу можно использовать два метода:
Код:
Для освобождения нужной памяти тебе надо освобождать в цикле, начиная с головы: Код:
a.k.a. Angelicos Phosphoros
Мой сайт Последний раз редактировалось New man; 13.10.2016 в 12:08. |
|
13.10.2016, 12:07 | #3 |
Пользователь
Регистрация: 06.07.2008
Сообщений: 91
|
New man спасибо за помощь!
Только хотел уточнить. Если в цикле выделял память, структуры всегда одна за одной будут располагаться, или не обязательно? Если не обязательно, то выделяя в цикле память, перемещаться по head--, head++ выходит нельзя. |
13.10.2016, 12:57 | #4 | ||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,708
|
Цитата:
Цитата:
|
||
13.10.2016, 13:30 | #5 |
Пользователь
Регистрация: 06.07.2008
Сообщений: 91
|
p51x огромное спасибо!
Теперь осталось уяснить моменты с free. |
13.10.2016, 13:57 | #6 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,708
|
А что с free не понятно? Вы ей указатель она грит системе, что память ее.
|
13.10.2016, 14:35 | #7 |
Пользователь
Регистрация: 06.07.2008
Сообщений: 91
|
free передаю указатель на начало списка структур, но вываливаются ошибки и аварийный останов. Не пойму в чём моя ошибка.
|
13.10.2016, 15:06 | #8 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,708
|
Поставьте точку останова и посмотрите, чему указатель равен. Может он нулл.
|
13.10.2016, 15:59 | #9 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
ну может и нулл, что с того?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
13.10.2016, 17:51 | #10 | |
Форумчанин
Регистрация: 24.01.2011
Сообщений: 774
|
Цитата:
Код:
a.k.a. Angelicos Phosphoros
Мой сайт |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Динамическое выделение памяти под матрицу. Не понимаю как работает. | Че Гевара | Общие вопросы C/C++ | 8 | 03.06.2013 17:48 |
Язык СИ! Динамическое выделение памяти под массивы и матрицы, передача матрицы в функции | Андрей! | Общие вопросы C/C++ | 33 | 31.01.2012 22:07 |
Динамическое выделение памяти под массив объектов со специализированным конструктором | capta1n | Общие вопросы C/C++ | 6 | 07.03.2010 16:01 |
динамическое выделение памяти под верхний треугольник квадратной матрицы | juventine | Помощь студентам | 2 | 12.04.2009 13:02 |
Динамическое выделение памяти под массивы | Артем125 | Общие вопросы C/C++ | 4 | 07.04.2009 09:52 |