Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
PihPuh
0 / 0 / 0
Регистрация: 02.08.2015
Сообщений: 2
1

Как компилятор узнаёт о размере массива при выполнении операции delete?

02.08.2015, 14:09. Просмотров 886. Ответов 5
Метки нет (Все метки)

Такой глупый вопрос появился при изучении операций new и delete.
Я создаю указатель на массив int с помощью операции new.
C++
1
2
3
4
int size;
cin>>size;
int* pointer;
pointer = new int[size];
Затем, после инициализации его значениями, применяю операцию delete.
C++
1
delete [] pointer;
Хотел бы узнать, как это работает.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2015, 14:09
Ответы с готовыми решениями:

Недопустимая операция при выполнении оператора delete[]
Проблема у меня такая. Есть функция. Кусок ее кода выглядит примерно так:...

Длинная арифметика: при выполнении операции A-B, массив A портится
class BigInt { static const int max_size = 100000;//количество...

Ошибка при большом размере массива
Есть код: #include <stdio.h> main() { int y=0; const int i=10000000; //...

Почему при выполнении оператора delete возникает ошибка "program.exe has triggered a breakpoint"?
class test { public: void a() { std::cout << "test::a" << std::endl; }...

Как передать в фукнцию массив без передачи дополнительных данных о размере массива?
Если передавал по указателю, то не не указал размер, а как могу определить...

5
DrOffset
8927 / 4808 / 1176
Регистрация: 30.01.2014
Сообщений: 7,844
02.08.2015, 14:22 2
Лучший ответ Сообщение было отмечено PihPuh как решение

Решение

Любой ответ на этот вопрос привяжет к конкретной реализации. Может быть по-разному реализовано.

Например может использоваться такой подход:
Выделяется size * sizeof(T) + sizeof(size_t) памяти
В первые sizeof(size_t) байт записывается значение size.
Пользователю возвращается следующий за этим значением адрес блока.
При освобождении памяти смотрим на sizeof(size_t) байт "назад" от переданного указателя и читаем значение size.
1
0x10
2577 / 1756 / 289
Регистрация: 24.11.2012
Сообщений: 4,387
02.08.2015, 14:23 3
Короткий ответ: это магия.
Из официального C++ FAQ.
0
PihPuh
0 / 0 / 0
Регистрация: 02.08.2015
Сообщений: 2
02.08.2015, 14:27  [ТС] 4
Long answer вполне устроил, спасибо
0
DrOffset
8927 / 4808 / 1176
Регистрация: 30.01.2014
Сообщений: 7,844
02.08.2015, 14:29 5
Цитата Сообщение от PihPuh Посмотреть сообщение
Long answer вполне устроил, спасибо
По ссылке от 0x10 есть реализация как описанного мной варианта, так и другого возможного.
0
Evg
Эксперт CАвтор FAQ
19305 / 7160 / 533
Регистрация: 30.03.2009
Сообщений: 20,041
Записей в блоге: 30
02.08.2015, 15:50 6
Цитата Сообщение от PihPuh Посмотреть сообщение
Как компилятор узнаёт о размере массива при выполнении операции delete?
На вопрос уже в общем-то ответили, просто для общего понимания подкину ссылку
http://www.cyberforum.ru/cpp-experts/thread300431.html#post1671703
0
02.08.2015, 15:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2015, 15:50

Ошибка при удалении массива с помощью delete
Изучаю C++ и у меня задание разбить текст неопределенной длинны на массив...

Операции new и delete
Привет всем! У меня вопрос по указателям. Вот я создал массив указателей. Через...

C++5 числами из массива при выборе операции показывает результат. (сумма, произведение . элементов массива)
#include <iostream> using namespace std; void main() { int m, i; char...


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

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

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