214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
|
1 | |
Вопрос про catch и delete11.08.2011, 22:21. Показов 2011. Ответов 27
Метки нет (Все метки)
0
|
11.08.2011, 22:21 | |
Ответы с готовыми решениями:
27
Легенда про try catch Расскажите про new и delete в C++ моя первая плата, хедеры - вопрос про eagle или про пайку Вопрос про обратную связь, и про схемотехнику полумоста |
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
11.08.2011, 22:34 | 2 |
К нулевому указателю можно спокойно применять операцию delete. Вообще-то, даже рекомендуется обнулять указатель после применения delete на тот случай, если вдруг где-то в другом месте к этому же указателю снова применят delete.
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
11.08.2011, 22:35 | 3 |
По стандарту. Аргументом delete может быть нулевой указатель. В этом случае ничего не происходит.
1
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
|
11.08.2011, 22:57 [ТС] | 4 |
всем спасибо не знал.
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
12.08.2011, 04:43 | 5 |
Это кто же Вас надоумил так С-строки сравнивать? "Данная операция" скорее всего вообще не выполняется...
0
|
Заблокирован
|
||||||
12.08.2011, 04:55 | 6 | |||||
Она может выполниться, если ранее был код
0
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
|
12.08.2011, 09:06 [ТС] | 7 |
браво
Добавлено через 2 минуты конечно Сыроежка прав. Я привел кусок листинга который интересовал. Зачем весь код? более того. нет никаких дублирующих литералов. throw выкидывает литералы с разными именами. а внутри catch параметр имеет имя k. и что с того? Мы имеем на входе например a = BLACK b = RED; k = a - далее проверка. k = b - далее проверка. Де дубляж. Размусольте, буду знать
0
|
Higher
|
|
12.08.2011, 09:23 | 8 |
Возможно недопонял вопрос, но char* это же указатель. Соответственно сравниваем мы не строки, а указатели на них. Если указывают на одну и ту же ячейку памяти, то они равны. Иначе - не равны.
0
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
|
12.08.2011, 09:29 [ТС] | 9 |
ну да. а де дубляж?
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|||||||||||
12.08.2011, 10:28 | 10 | ||||||||||
Да и я с ним здесь полностью согласен. Вы только внимательно его пост перечитайте. Я понял, что это кусок программы и догадался, что где-то раньше могло быть
0
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
||||||
12.08.2011, 11:36 [ТС] | 11 | |||||
easybudda, имеется ввиду область видимости автопеременных? ну конешно если я раз написал а = ... а потом еще раз объявил где то а и определил то можно и запутаться. Или если я указателю а присвоил другой литерал. НО...это не тот случай поскольку k
Короче ситуацию Сыроега описал странную. Следуя той логике можно воротить абсолютно любые ошибки. Переназначать переменные, забывая из смысл ....ну и тд и тп.
0
|
Higher
|
||||||
12.08.2011, 11:40 | 12 | |||||
AzaKendler, просто вот этот код
А гарантии того, что указатели совпадут, нету.
2
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
|
12.08.2011, 11:46 [ТС] | 13 |
diagon, тем более дубляж невозможен. если есть строка в памяти на которую указывает переменная то в катче -к и получит этот адрес. разве k=a для указателя не присвоит k адрес а?.Присвоит. В чем тут путаница. Только если умышленно что то придумать.
Ладно тему пора прикрыть. ответ получен а дальше уже обсуждаются отвлеченные вещи. в конкретном случае с катчем никакая путаница кроме как умышленно созданная - невозможна
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
12.08.2011, 11:49 | 14 |
AzaKendler, я так почти и не понял ничего из того, что ты написал, хотя мне совершенно понятно то, о чём говорили easybudda, Сыроежка и diagon. Ну да ладно.
Ответь на простой вопрос. Что подразумевалось под этой операцией: Сравнение строк или сравнение указателей?
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
12.08.2011, 12:14 | 15 |
AzaKendler, да уж и не знаю, как понятнее объяснить...
Если char * a = "ABC" и char * b = "ABC" это вовсе не значит, что a == b. Могут на один участок памяти указывать, могут на разные. Добавлено через 1 минуту Ну дело ваше. Но если что - Вас предупреждали...
0
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
||||||
12.08.2011, 13:18 [ТС] | 16 | |||||
хорошо. как правильно произвести сравнение?
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||||||||||||||||
12.08.2011, 13:27 | 17 | |||||||||||||||
Лучше сделать enum...
1
|
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
|
|||||||||||
12.08.2011, 13:32 | 18 | ||||||||||
AzaKendler, мне кажется код лучше слов, вот две программы, откомпилируйте, вводите "hello"
и посмотрите разницу:
1
|
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
|
||||||
12.08.2011, 13:33 [ТС] | 19 | |||||
ребят спасибо что подсказали.
правильно ли я понял?
некий указатель - непонятно с чем? со строкой? т.е. должно быть false?
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
12.08.2011, 14:33 | 20 | |||||
Поясняю. Рассмотрим пример:
GCC выдаёт false true MSVC2008 без оптимизации выдаёт false false MSVC2008 с оптимизацией выдаёт false true Вопрос: какое поведение правильно? Ответ: все
1
|
12.08.2011, 14:33 | |
12.08.2011, 14:33 | |
Помогаю со студенческими работами здесь
20
вопрос про Sape, про поиск площадок Про указатели, массивы, new/delete и красивости /* удалить/вставить в массив */ Про утечку памяти, new, delete и функции, возвращающие указатель на структуру Конструкция try catch в цикле while. Зацикливается блок catch Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |