Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.86
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
#1

Проверка существования структуры - C++

17.12.2011, 21:32. Просмотров 3042. Ответов 46
Метки нет (Все метки)

Гугл ничего не дал так, что думаю будет многим полезно.

Язык си,

как проверить существует ли структура по данному адресу (была ли она задана)?

В других языках есть try/catche на си вроде нет, только на си++.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2011, 21:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка существования структуры (C++):

Проверка существования логина - C++
Помогите пожалуйста, нужно сделать проверку на логин, т.е. если при регистрации нового аккаунта с уже существующим логином, выводило, что...

Проверка существования файла - C++
Всем привет! Как можно реализовать проверку существования файла (если файл не существует, то при чтении выдается ошибка, при а при записи...

Проверка существования файла - C++
Надо сбросить массив char в файл. Если файл уже существует - ждать, пока его не удалят. Вот этот код не компилируется, выдаёт error C2664:...

Проверка на существования файла - C++
Можно ли проверять файл на существование таким образом: ifstream file("file.txt"); if (file.is_open()) {} //Если файл...

Проверка условия существования треугольника - C++
нужно написать программу Даны 3 числа, определить могут ли эти числа являться сторонами треугольника

проверка существования файла с использованием ifstream() - C++
гуглил, но ничего там так и не нашел. Собственно как?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alkagolik
Заблокирован
17.12.2011, 21:35 #2
Цитата Сообщение от awpe Посмотреть сообщение
как проверить существует ли структура по данному адресу
обратиться к полю структуры. а с чего ей не быть?
0
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 21:48  [ТС] #3
При обращении к полю несуществующей структуры получаю ошибку access violation, что логично так как если её нет, то память под неё не выделялась, и следовательно ОСь об этом не знает и вырубает программу. Ну я так это понимаю поправьте если неправ.

Добавлено через 3 минуты
Так можно проверить структуру на существование простым способом или нужно составлять программу так чтобы эту проверку избежать?
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.12.2011, 21:54 #4
Цитата Сообщение от awpe Посмотреть сообщение
или нужно составлять программу так чтобы эту проверку избежать?
только так
есть функции наподобии IsBadWritePtr, но 100%ной уверенности никогда не будет
0
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 22:01  [ТС] #5
В моей программе структура содержит адреса родителя и нескольких веток, когда я циклом обхожу дерево, мне нужно проверять есть ли ветка или нет, создаю структуры malloc'ом поэтому в полях указателей на ветки всегда что то есть (случайные фрагменты), доступа к main по заданию нет, а функция может вызываться сколько угодно раз в любом порядке, поэтому не могу точно задать что корень в начале программы имеет пустые ветки, следовательно нужно проверять, либо предложите пожалуйста другой путь.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.12.2011, 22:06 #6
Цитата Сообщение от awpe Посмотреть сообщение
мне нужно проверять есть ли ветка или нет
при создании новой вершины дерева нужно в ее полях на обе ветви выставить NULL
при создании ветви заменить NULL на указатель на ветвь
при обходе дерева проверять - если не NULL то там есть ветвь
0
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 22:10  [ТС] #7
по другому поставлю вопрос - зная адрес можно проверить лежит ли там экземпляр структуры?

Добавлено через 1 минуту
IsBadWritePtr только под винду

Добавлено через 1 минуту
мне под *NIX надо

Добавлено через 52 секунды
Цитата Сообщение от alex_x_x Посмотреть сообщение
при создании новой вершины дерева нужно в ее полях на обе ветви выставить NULL
Я так и делаю, но у меня по условию нет доступа к первому узлу
0
fasked
Эксперт С++
4937 / 2517 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 22:10 #8
Цитата Сообщение от awpe Посмотреть сообщение
по другому поставлю вопрос - зная адрес можно проверить лежит ли там экземпляр структуры?
Нет. Нельзя.
0
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 22:10  [ТС] #9
неужели от меня на первом курсе требуют в домашке реализовать try/catche на си?
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.12.2011, 22:12 #10
Цитата Сообщение от awpe Посмотреть сообщение
по другому поставлю вопрос - зная адрес можно проверить лежит ли там экземпляр структуры?
Добавлено через 1 минуту
IsBadWritePtr только под винду
Добавлено через 1 минуту
мне под *NIX надо
нет
Цитата Сообщение от awpe Посмотреть сообщение
В других языках есть try/catche на си вроде нет, только на си++.
это бы тоже не помогло

я не понимаю как так можно строить дерево, чтобы нельзя было проверить, есть в вершине ветви или нету
0
fasked
Эксперт С++
4937 / 2517 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 22:16 #11
Чисто теоретически любой набор байтов можно считать структурой. Особенно на Си.
C
1
2
3
4
5
6
7
8
9
struct s {
    int a;
    int b;
};
 
int main() {
    char buf[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
    struct s *sptr = (struct s*)buf;
}
Вполне нормальная ситуация. А теперь подумайте. Каким образом вообще можно проверить существование структуры по какому-либо адресу?
0
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 22:19  [ТС] #12
Я должен строить только недостающие узлы. У меня нет возможности первому узлу в начале программы присвоить NULL на все ветки, а если в функции ставить NULL для корня то каждый следующий её вызов обрубит ветки дерева...
0
fasked
Эксперт С++
4937 / 2517 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 22:21 #13
awpe, может быть Вы уже покажете задание полностью. Есть подозрение, что Вы просто его неправильно понимаете.
0
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 22:23  [ТС] #14
Цитата Сообщение от fasked Посмотреть сообщение
А теперь подумайте. Каким образом вообще можно проверить существование структуры по какому-либо адресу?
Ну на другом языке я бы, зная устройство своей структуры, проверил бы значение одного её элемента, случайный набор байтов вызовет ошибку, на php проверил бы через isset на c++ try/catche, на си не знаю... Разве что только параллельно заданию создать копию структуры в которую писать все изменения...

Добавлено через 25 секунд
http://pastebin.com/tEKfpnCe
0
fasked
Эксперт С++
4937 / 2517 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 22:26 #15
Цитата Сообщение от awpe Посмотреть сообщение
случайный набор байтов вызовет ошибку
Не вызовет. Если это конечно не какое-то магическое число, которое записывается в спец. поле каждого экзепляра.
Цитата Сообщение от awpe Посмотреть сообщение
на c++ try/catche
Каким это образом? Может поделитесь дельным примером?

Вы кстати свое задание то читали?
m_Parent - ссылка на родителя в дереве (NULL для корня дерева),
m_Branches - ссылка на потомки в дереве (NULL - потомка не существует).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2011, 22:26
Привет! Вот еще темы с ответами:

Проверка существования трехугольника с заданными сторонами, и определение его типа - C++
В консольном режиме создать программу для проверки существования трехугольника с задаными сторонами. Если трехугольник существует,указать...

Помещение структуры в вектор, удаление структуры, изменение элементов структуры - C++
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Структуры: проверка на наличие среди продавцов фамилии "Иванов" и если есть, то вывести наименование товара - C++
Поля структуры: Продавец. Наименование товара. Количество товара. Цена товара. Дата продажи. Задача: определить количество товаров...

Функция внутри структуры использует указатель, как поле этой структуры - C++
Коротко, есть класс A, описан в файле A_class.h ну и реализованы функции в A_class.cpp, есть файл GlobalItems.h, где хранятся глобальные...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.12.2011, 22:26
Ответ Создать тему
Опции темы

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