Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Bolbine84455
5 / 5 / 3
Регистрация: 12.03.2014
Сообщений: 335
1

Структуры и указатели

01.01.2016, 23:19. Просмотров 237. Ответов 2
Метки нет (Все метки)

Задался парой вопросов. Возможно, уже где-то задавались, поэтому прошу прощения заранее.
Ниже описана структура для однонаправленного списка, состоящего из информационного поля и адресного поля.
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
struct pointDir
{
    char *data;
    pointDir *next;
};

Можно было описать массив символов, но чтобы сделать информационное поле "резиновым", решили хранить только указатель, ссылающийся на область в памяти, т.е. на динамический массив, созданный при помощи new.
Прошу меня заранее поправить, если я уже где-то ошибся. Для меня это очень важно ))
Адресное поле содержит указатель, ссылающийся на следующий объект структуры, если он существует.
Когда я пытаюсь заполнить информационное поле, то пишу следующим образом:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
char *buf = new char [n];
buf = "123";
beg = new (pointDir);
beg -> data = buf;
delete buf;

Я специально написал "delete buf" для высвобождения памяти, но при дальнейшем выводе содержимого списка выясняется, что значение "123" сохранилось. Почему? Я передал в указатель ссылку на buf, а потом удалил buf, т.е. при выводе информационного поля я должен был получить что угодно, но только не "123", т.к. его там уже не должно было быть.
Другой вопрос.
Не могу понять, как же правильно ставить звездочки при работе с указателями, хоть работает и так и сяк...
Кликните здесь для просмотра всего текста

C++
1
2
3
4
pointDir *beg;
pointDir* beg;
pointDir* func(...);
pointDir *func(...);

Постоянно вижу char*, char* buf[100], но ведь обращаемся к указателю *buf и там не указывается char при обращении.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.01.2016, 23:19
Ответы с готовыми решениями:

Указатели на структуры
type celltype = record elетеt: integer; next: ^celltype end; ...

Указатели и структуры
Здравствуйте. Подскажите, пожалуйста, почему не меня среда ругается. error...

Указатели и структуры
Здравия желаю. Подскажите пожалуйста каким образом осуществляется доступ к полю...

Структуры и указатели
Привет форумчане, столкнулся вот с такой вот задачкой на структуры: 1. Описать...

Указатели на структуры
Подскажите в чем ошибка...Дело в том когда я в вожу в каждое поле по 1 значению...

2
Lawliet1
29 / 32 / 18
Регистрация: 30.09.2011
Сообщений: 202
Завершенные тесты: 1
02.01.2016, 00:12 2
Ответ на первый вопрос: вы не удаляете массив символов, вы просто удалили адрес, если ходите удалить весь массив пишите так
C++
1
 delete [] buf;
На счет второго вопроса: при определении указателя нет разницы где ставить звездочку можно и так
C++
1
PoinDir* beg;
и так
C++
1
PointDir *beg
....
1
nord_v
329 / 177 / 80
Регистрация: 22.08.2013
Сообщений: 724
02.01.2016, 03:12 3
Цитата Сообщение от Bolbine84455 Посмотреть сообщение
C++
1
2
char *buf = new char [n];
buf = "123";
Память утекла, теперь buf содержит адрес не начала блока данных типа char, созданного в куче, а адрес строкового литерала "123" (память только для чтения).
Цитата Сообщение от Bolbine84455 Посмотреть сообщение
C++
1
beg -> data = buf;
Теперь указатель data содержит адрес строкового литерала.
Цитата Сообщение от Bolbine84455 Посмотреть сообщение
C++
1
delete buf;
Попытка, через delete, освободить память, которая не выделялась через new, приведёт к UB при работе кода.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2016, 03:12

Указатели на структуры и функции
Я собственно не хотел бы заводить очередную тему на полезность/бесполезность...

Структуры и указатели на структуры
Так ли я сделал? #include <iostream> struct S { int i; }; void...

Указатели и динамические структуры данных
Задание 1. Дан указатель P1 на вершину стека (если стек пуст, то P1 =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru