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

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

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

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

17.12.2011, 21:32. Просмотров 3154. Ответов 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++
гуглил, но ничего там так и не нашел. Собственно как?

46
alkagolik
Заблокирован
17.12.2011, 22:30 #16
Цитата Сообщение от awpe Посмотреть сообщение
по другому поставлю вопрос - зная адрес можно проверить лежит ли там экземпляр структуры?
Цитата Сообщение от alex_x_x Посмотреть сообщение
при создании новой вершины дерева нужно в ее полях на обе ветви выставить NULL
при создании ветви заменить NULL на указатель на ветвь
при обходе дерева проверять - если не NULL то там есть ветвь
5 букв
0
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 22:34  [ТС] #17
Цитата Сообщение от fasked Посмотреть сообщение
на c++ try/catche
при доступе к невыделенному программой блоку памяти будет ошибка которую данная конструкция обработает и программа не вылетит как на си (ну я надеюсь )


Цитата Сообщение от fasked Посмотреть сообщение
m_Parent - ссылка на родителя в дереве (NULL для корня дерева),
m_Branches - ссылка на потомки в дереве (NULL - потомка не существует).
если функция setDecoration вызывается один раз то все нормально - корню я задам NULL в ветвях и дальше все хорошо, но я так понял что заранее мне не известно что там, а согласно примерам там ничего только случайные данные (malloc)

Добавлено через 1 минуту
C
1
2
3
4
5
6
7
8
9
10
11
12
TNODE * n;
int     x;
 
n = NULL;
x = setDecoration ( &n, (char*) "000", DECORATION_SPARKLER );  /* x = 1 */
x = setDecoration ( &n, (char*) "001", DECORATION_SPARKLER );  /* x = 1 */
x = setDecoration ( &n, (char*) "002", DECORATION_SPARKLER );  /* x = 1 */
x = setDecoration ( &n, (char*) "1", DECORATION_CANDLE ); /* x = 1 */
x = setDecoration ( &n, (char*) "01", DECORATION_NONE );  /* x = 1 */
x = setDecoration ( &n, (char*) "", DECORATION_CANDLE ); /* x = 1 */
x = easyToCatchFire ( n ); /* x = 0 */
destroyTree ( n );
я так понимаю моя функция должна при первом вызове поставить в ветках корня NULL, а при последующих этого не делать...

Добавлено через 1 минуту
Этого можно достичь либо введением новой глобальной переменной, изменением структуры, или проверкой на существование, все три варианта отваливаются...
0
alkagolik
Заблокирован
17.12.2011, 22:35 #18
Цитата Сообщение от awpe Посмотреть сообщение
а согласно примерам там ничего только случайные данные (malloc)
в последней реализации (по крайней мере GNU) маллок возвращает память с нулями.
1
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 22:36  [ТС] #19
Ну или я, просидев много часов уже не соображаю и не вижу очевидного)

Добавлено через 54 секунды
Цитата Сообщение от alkagolik Посмотреть сообщение
в последней реализации (по крайней мере GNU) маллок возвращает память с нулями.
вот это уже интересно у меня dev c++ на win7, может поэтому там мусор в malloc?

Добавлено через 18 секунд
нули бы все поставили на свои места...
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 22:37 #20
Цитата Сообщение от awpe Посмотреть сообщение
при доступе к невыделенному программой блоку памяти будет ошибка которую данная конструкция обработает и программа не вылетит (ну я надеюсь )
Скажите, а Вы в Деда Мороза верите?
Цитата Сообщение от awpe Посмотреть сообщение
если функция setDecoration вызывается один раз то все нормально - корню я задам NULL в ветвях и дальше все хорошо, но я так понял что заранее мне не известно что там, а согласно примерам там ничего только случайные данные (malloc)
Найдите пример на форуме, как строятся деревья. По аналогии разберетесь.
Дерево

Добавлено через 39 секунд
Цитата Сообщение от awpe Посмотреть сообщение
нули бы все поставили на свои места...
Используйте calloc.
1
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 22:39  [ТС] #21
Надо calloc использовать!)

Добавлено через 33 секунды
Спасибо! Разобрался - зациклился на malloc...
0
alkagolik
Заблокирован
17.12.2011, 22:40 #22
Цитата Сообщение от awpe Посмотреть сообщение
меня dev c++ на win7, может поэтому там мусор в malloc?
Цитата Сообщение от awpe Посмотреть сообщение
мне под *NIX надо

соберите последнюю версию mingw. Там должно быть точно так же как и под юникс. Я был приятно удивлен когда поставил последнюю версию gcc и по случаю замечал что память с нулями, потом проверил - да так.
Вы просто немного не так понимаете задачу, ну или подход к решению.
0
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 22:42  [ТС] #23
Ну первый подход - чтобы работало, потом оптимизация и изменения - сдать надо через сутки
0
alkagolik
Заблокирован
17.12.2011, 22:45 #24
вот это кстати сомнительно. Получается что поле структуры не может содержать данные в виде нуля. Ограничение.
Цитата Сообщение от awpe Посмотреть сообщение
нули бы все поставили на свои места...
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 22:51 #25
Цитата Сообщение от alkagolik Посмотреть сообщение
соберите последнюю версию mingw. Там должно быть точно так же как и под юникс. Я был приятно удивлен когда поставил последнюю версию gcc и по случаю замечал что память с нулями, потом проверил - да так.
Типичный пример того, как писать непереносимый код.
Цитата Сообщение от alkagolik Посмотреть сообщение
Получается что поле структуры не может содержать данные в виде нуля. Ограничение.
Обнулятся указатели на потомков и родителя.
0
alkagolik
Заблокирован
17.12.2011, 22:54 #26
Цитата Сообщение от fasked Посмотреть сообщение
Типичный пример того, как писать непереносимый код.
где пример? покажите. Я как раз против того чтобы полагаться на нули в выделенной памяти.
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 22:57 #27
Цитата Сообщение от alkagolik Посмотреть сообщение
где пример? покажите. Я как раз против того чтобы полагаться на нули в выделенной памяти.
Что ж Вы тогда такие советы даете?
Цитата Сообщение от alkagolik Посмотреть сообщение
соберите последнюю версию mingw. Там должно быть точно так же как и под юникс.
0
alkagolik
Заблокирован
17.12.2011, 23:07 #28
Надо ему вот и говорю что и как. Между прочим с оговоркой. Полагаться на особенности компилятора это очень сомнительная мысль. Ладно, вода, проехали.
0
awpe
2 / 2 / 0
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 23:12  [ТС] #29
Ладно сдаюсь - ничего не получается, как ни крути, а не знаю как сделать функцию, которая не затрет дерево при следующем вызове.

Добавлено через 1 минуту
в задании в функцию передается только адрес корня и все, менять устройство структуры нельзя, как сделать это дерево?
0
alkagolik
Заблокирован
17.12.2011, 23:18 #30
Цитата Сообщение от awpe Посмотреть сообщение
как сделать это дерево?
у вас есть вообще функция добавления ветки к дереву? в ней надо при создании ветки обнулять указатели на потомков. Так же и при удалении ветки.
0
17.12.2011, 23:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2011, 23:18
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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