Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/14: Рейтинг темы: голосов - 14, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 42
1

Работа с массивом char через динамическую память

15.05.2021, 12:53. Показов 2632. Ответов 4

Author24 — интернет-сервис помощи студентам
Здравствуйте. Изучаю для себя как работают Си-строки, используя память динамически. Вопрос в следующем: я выделяю память динамически под один элемент. При включении отладчика, видно, что выделилась память под один элемент и после этого еще какие-то "ээээ" (смотреть первый скрин). Первый вопрос заключается как раз таки в том, что за код (или что за приведение типов) подразумевают эти "ээээ". Ладно, бог с ним, дальше через функцию cin я определяю выделенную память (После этого "ээээ" пропадают). Я думал в начале что это всё-таки терминирующий ноль, поскольку после использования cin возникает понятная утечка памяти. Кстати к этому у меня тоже вопрос: как можно увидеть, я использовал функцию strlen, которая вроде как работает с терминирующим нулём, и поскольку терминирующий ноль "съели", то функция должна крашнутся, но этого не происходит, а вот оператор delete[] крашится и видимо из-за как раз таки терминирующего ноля (скрин 2,3). Именно поэтому возникает вопрос: а это точно терминирующий ноль?
Но да ладно. Возьмем другую ситуацию. На скрине 4 я определил конкретный элемент иии... там после него просто огромнейшее кол-во символов, и strlen возвращает 14 символов. Вопрос: откуда? Почему они там появились?

Использую IDE Visual studio 19'го стандарта, с отключенным /permissive-.
Миниатюры
Работа с массивом char через динамическую память   Работа с массивом char через динамическую память   Работа с массивом char через динамическую память  

Работа с массивом char через динамическую память   Работа с массивом char через динамическую память  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2021, 12:53
Ответы с готовыми решениями:

Работа с массивом char
Есть у меня массив char *ans1; и мне надо записать в него строку for (int i = 0; i <...

Работа с массивом char
Товарищи подскажите пожалуйста, не могу никак понять в чём проблема. Есть массив скажем: int X;...

Работа с массивом char
Добрый день. Объясните, если не сложно, на пальцах в чем ошибка? char*my1={"first my1","second...

Работа с массивом char
Вот задание Вам дана непустая строка, состоящая из строчных латинских букв, цифр и пробелов....

4
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
15.05.2021, 13:45 2
метод
C++
1
istream& oprerator>>(istream&, char*);
автоматически добавляет терминальный ноль,
а при самостоятельном заполнении это обязанность программиста!
strlen считает количество символов до терминального нуля.
Если его не вставить, то она будет считать дальше, пока не наткнется на ноль или выйдет за границы дозволенной памяти.
1
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 42
15.05.2021, 14:57  [ТС] 3
Спасибо

Добавлено через 7 минут
А почему тогда выход за границы не срабатывает для оператора delete[], во втором случае(скриншот 4)? Там же выход получается за границы выделенной памяти, как и в первом случае?

Добавлено через 2 минуты
то есть я имею ввиду, там же должен был в таком случае вылететь экспешн как и в первый раз (скрин 2) для delete[]?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
15.05.2021, 18:07 4
Лучший ответ Сообщение было отмечено Lognus как решение

Решение

Исключение может и не сработать (не обязательно выход за границы портит что-то существенное).
1
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 42
15.05.2021, 18:11  [ТС] 5
Понял вас. Спасибо огромное!
0
15.05.2021, 18:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2021, 18:11
Помогаю со студенческими работами здесь

Работа с массивом символов Char
Народ помогите! 2. Дано целое число N и текстовый файл. Создать строковый файл, содержащий все...

работа с массивом символов типа Char
Пытаюсь разобраться со следующим заданием. Допустим есть некоторая строка большой длины, требуется...

Работа с текстовым массивом типа char
Доброго времени суток! Задача такая: 1)Создать двумерный массив символов (массив типа char), для...

Работа с рваным массивом, тип элементов char
Помогите, пожалуйста, нужно написать код в C#!!!! Нужно создать рваный массив из элементов char...

Работа с массивом через пользовательские функции через указатели
Не хочет работать ( Выводит только последний элемент массива ) Help! #include <iostream> using...

Работа с массивом с через strcpy_s()
Функция addBrackets принимает массив и преобразует его заключая в скобки . т.е. на на вход массив:...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru