|
|
||||||
Нужно ли очищать char * old value как?29.04.2019, 23:01. Показов 5278. Ответов 55
Метки нет (Все метки)
0
|
||||||
| 29.04.2019, 23:01 | |
|
Ответы с готовыми решениями:
55
Нужно ли очищать термопласту,если да то как? Нужно ли перед удалением контейнера очищать его? Класс list, когда нужно очищать память? |
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||
| 03.05.2019, 03:46 | ||
NULL и символом конца строк \0 нет, и даже упоминать NULL в этом контексте - неправильно.
0
|
||
|
|
||||||||||||
| 03.05.2019, 20:14 [ТС] | ||||||||||||
|
сейчас я попытаюсь объяснить , поправьте меня плиз если я неправ в первом случае
во втором случае
непонятно другое. выше описаное повидение валидно только для нуля. если брать вторую ячейку то и в первом и вов тором варианте мы прекрасно печатаем mouse в консоль по p[2] и разименовывать указатель на не нужно
0
|
||||||||||||
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||||||||||||
| 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
|
|
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||
| 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
|
|||||||||||||||||
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||||||||||||||||
| 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
|
|||||||||
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||||||
| 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
|
|||||||
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
|||
| 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
|
|||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 09.05.2019, 15:35 | ||
|
0
|
||
| 09.05.2019, 15:35 | |
|
Как очищать TextOut(x,y)? Как очищать таблицу? Как правильно очищать память? Память освобождается, только если программа работает при char *c, а нужно при char c Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|