|
|
||||||
Нужно ли очищать char * old value как?29.04.2019, 23:01. Показов 5047. Ответов 55
Метки нет (Все метки)
0
|
||||||
| 29.04.2019, 23:01 | |
|
Ответы с готовыми решениями:
55
Нужно ли очищать термопласту,если да то как? Нужно ли перед удалением контейнера очищать его? Класс list, когда нужно очищать память? |
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 03.05.2019, 03:46 | ||
NULL и символом конца строк \0 нет, и даже упоминать NULL в этом контексте - неправильно.
0
|
||
|
|
||||||||||||
| 03.05.2019, 20:14 [ТС] | ||||||||||||
|
сейчас я попытаюсь объяснить , поправьте меня плиз если я неправ в первом случае
во втором случае
непонятно другое. выше описаное повидение валидно только для нуля. если брать вторую ячейку то и в первом и вов тором варианте мы прекрасно печатаем mouse в консоль по p[2] и разименовывать указатель на не нужно
0
|
||||||||||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||||||||||||
| 03.05.2019, 21:38 | ||||||||||||
|
Вот это
printf. Спецификатор %s требует аргумента-указателя, а вы передаете туда char (который превращается в int).И еще раз
0
|
||||||||||||
|
|
|
| 03.05.2019, 22:50 [ТС] | |
|
Я так печатать не собираюсь, это чисто для того чтоб увидить что там while видит. Только так видит(null) и только так он срабатывает.
А почему так нельзя это же не const литералы строк ? А простой дву мерный массив доступный для записи? Еще раз. Через p[2] mouse печатает для обоих вариантов. Но вот как условие для while p [i] не отрабатывает для двумерного массива.
0
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 04.05.2019, 01:07 | ||
|
Макрос NULL предназначен для использования только в указательных контекстах: для инициализации/присваивания указателей или для сравнения на равенство с указателями. Все. Больше NULL нигде применять нельзя.
0
|
||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||||||||||||||||
| 04.05.2019, 04:05 | |||||||||||||||||
|
TheCalligrapher, и в настоящее время для указателей используется
nullptr, а NULL только для старых компиляторов, не поддерживающих С++11Добавлено через 16 минут alexbmd, вместо while (*pa[i])сделай
Кроме того, задавать размер массива с помощью числа считается дурным тоном (т.к. это число, как в коде выше, может потребоваться во многих местах, а через "правка - заменить всё" даже в небольшом проекте это делать будет неудобно). Задавай размер массива с помощью макроса или константной переменной. Например так, просто и ясно:
Добавлено через 10 минут
0
|
|||||||||||||||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||||||||||||||||
| 04.05.2019, 05:28 | ||||||||||||||||
|
Я веду речь именно о том, что NULL теоретически может быть определен как nullptr и не будет работать ни в каком контексте, кроме указательных. Соответственно код автора вопроса может не компилироваться вообще.6*sizeof(char), когда классическая универсальная идиома
std::size, либо через вышеприведенный прием с sizeof p / sizeof *p.Это всегда было популярной альтернативной техникой, заменяющей заведение именованной константы. В большинстве случаев именованная константа мне нравится больше, но все равно не надо навязывать такие огульные заявления, как "задавать размер массива с помощью числа считается дурным тоном". Нет, не считается, если вы далее не повторяете эту константу. Более того, в ситуации, когда размер массива определяется в первую очередь количеством инициализаторов, именно предзадавать размер массива константой - дурной тон. Вот это - плохо: [] вместо [p_count], а только после этого сделать
1
|
||||||||||||||||
|
|
|||||||||
| 06.05.2019, 01:49 [ТС] | |||||||||
всеже не эквивалентно
вопрос 1) a) чем большев элементов, тем больше длину надо делать. вот для 4 элементов надо делать длину в 10 при том что все элементы могут быть 2 символа + 1 терминатор, всеравно надо делать 10 иначе на принт выводиться одна или более (в зависимости от комбинации) лишних строк с мусором. b) если добавить строку терминатора {"go", "cat", "mouse", "c", '\0'} то длину можно указать как и ожидается в 6 и будет работать правильно. пустую строку тоже не выводит. как и задумано. и тут всё понятно. почему же такое поведение как в пункте а ? вопрос 2) pa[i] имеет адрес начала каждого элемента, т.е. именно pa[i] (или *(pa+i) если кому то так привычнее) и только так способно вывести на принт весь элемент (или массив символов если кому так привычнее). В то время как *pa[i] выводит нулевой символ каждого элемента. Т.е. pa[i] адресс нулевого символа , *pa[i] сам символ. и вот while срабатывает только по символу. куда ведут адреса, что делает разименовывание это всё понятно. но вы вот говорите
Далее, если у нас такой массив как выше то pa[4] ведет на какойто адрес в памяти (мусор), и while (по адресу) не фейлится. тут с арифметикой все понятно. Но вот если у нас такой массив char *pa[] = {"go", "cat", "mouse", "c"}; то pa[4] ни куда не ведет (null) и соответсвено while нормально срабатывает по адресу. ПОЧЕМУ? ведь точно такаяже арифметика. неужели все дело в read-only memory?
0
|
|||||||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||||||
| 06.05.2019, 02:09 | ||||||
|
Если вы хотите использовать цикл while (*pa[i]), то тогда обязательно потребуется дополнительный элемент массива с нулем в первом символе[CPP] char pa[][10] = {"go", "cat", "mouse", "с", ""}; char pa[][10] = {"go", "cat", "mouse", "с", 0}; char pa[5][10] = {"go", "cat", "mouse", "с"}; // и т.п. [CPP] Никакого 10 здесь не нужно. Второй размер в таком варианте должен быть достаточным для хранения самой длинной строки, т.е. 6 или более.В любом случае, pa[i] - это никакой не "адрес", а целый массив. Массив неявно приводится к указателю (адресу).https://www.cyberforum.ru/cpp-beginners/thread1941443.html#post10231882 Во-первых, pa[4] здесь никакой не (null), а мусор. В-вторых, этот массив состоит из указателей, а массив выше - из массивов, а не из указателей. "Арифметика" тут совершенно разная.
0
|
||||||
|
|
|||||||
| 08.05.2019, 15:01 [ТС] | |||||||
//далее было много букф но оказалось что *p[i] == *(*(p+i)) и вопросы отпали я по началу думал достаточно одного разименовывания.////на другом компиляторе оказалось что ноль нужен и в конце *pa[] и в конце pa[][] я по началу думал все компиляторы одинаковы полезны
0
|
|||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||||||||||||||||||
| 08.05.2019, 15:25 | |||||||||||||||||||
Добавлено через 2 минуты А то что при отладке оно иногда срабатывает правильно - ну значит среди мусора в памяти оказалось достаточное число нулей, чтобы оказаться и в pa[4][0] Добавлено через 8 минут
*ptr и соответственно (*ptr)[1] и т.д.Добавлено через 4 минуты
0
|
|||||||||||||||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||||||
| 08.05.2019, 16:47 | |||||||
0
|
|||||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
|||
| 08.05.2019, 17:22 | |||
p объявлено как двумерный массив, это не верно. p[i] - это сам массив, а не "адрес массива". p[i] имеет свойство преобразовываться в указатель (адрес), но это будет не "адрес всего массива", а адрес его нулевого элемента, т.е. &p[i][0].p[i]. Нет, то, что происходит в этом примере к исходному p[i] отношения не имеет.
0
|
|||
|
|
|||||
| 09.05.2019, 15:25 [ТС] | |||||
|
ptr++ == ptr +1 ptr +1 == pa[i++] т.е. мы прыгаем на адрес следующего массива i+1. просто он совпадает с нулевым элементом. Добавлено через 16 минут Кликните здесь для просмотра всего текста
[вообще страная тенденция, вроде некоторые форумчяне знают ответ но предпочитают молчать или уводят разговор в другое русло или смеются мол я ерунду говорю. а по сути я двигался в верном направлении но тогда понятно не хватало знаний. и знающий форумчянен напрмиер мог сказть третья память стэк или дать еще более развернутый ответ вместо того чтоб смеятся]
heap, const, stack но вообще их 5
0
|
|||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 09.05.2019, 15:35 | ||
|
0
|
||
| 09.05.2019, 15:35 | |
|
Как очищать TextOut(x,y)? Как очищать таблицу? Как правильно очищать память? Память освобождается, только если программа работает при char *c, а нужно при char c Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж»
Уважаемые коллеги!
Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
|
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
|
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
|
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
|
|
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|