Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
PihPuh
0 / 0 / 0
Регистрация: 02.08.2015
Сообщений: 2
#1

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

02.08.2015, 14:09. Просмотров 231. Ответов 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? (C++):

Недопустимая операция при выполнении оператора delete[] - C++
Проблема у меня такая. Есть функция. Кусок ее кода выглядит примерно так: //... получам M и N float *pArr1 = new float ; int *pArr2 =...

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

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

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

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

Операции new и delete - C++
Привет всем! У меня вопрос по указателям. Вот я создал массив указателей. Через new я каждому присвоил значение 0. int* ptr; for...

5
DrOffset
7313 / 4413 / 999
Регистрация: 30.01.2014
Сообщений: 7,247
02.08.2015, 14:22 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Любой ответ на этот вопрос привяжет к конкретной реализации. Может быть по-разному реализовано.

Например может использоваться такой подход:
Выделяется size * sizeof(T) + sizeof(size_t) памяти
В первые sizeof(size_t) байт записывается значение size.
Пользователю возвращается следующий за этим значением адрес блока.
При освобождении памяти смотрим на sizeof(size_t) байт "назад" от переданного указателя и читаем значение size.
1
0x10
2465 / 1637 / 239
Регистрация: 24.11.2012
Сообщений: 4,037
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
7313 / 4413 / 999
Регистрация: 30.01.2014
Сообщений: 7,247
02.08.2015, 14:29 #5
Цитата Сообщение от PihPuh Посмотреть сообщение
Long answer вполне устроил, спасибо
По ссылке от 0x10 есть реализация как описанного мной варианта, так и другого возможного.
0
Evg
Эксперт CАвтор FAQ
17936 / 6164 / 409
Регистрация: 30.03.2009
Сообщений: 16,925
Записей в блоге: 27
02.08.2015, 15:50 #6
Цитата Сообщение от PihPuh Посмотреть сообщение
Как компилятор узнаёт о размере массива при выполнении операции delete?
На вопрос уже в общем-то ответили, просто для общего понимания подкину ссылку
http://www.cyberforum.ru/cpp-experts...ml#post1671703
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2015, 15:50
Привет! Вот еще темы с ответами:

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

Переписать значения второго массива в первый при выполнении заданного условия - C++
Необходимо написать программу, в которой переписываются значения с второго массива в первый, в том случае если елемент второго массива...

Программа, переносящая элементы первого массива во второй, при выполнении условия - C++
Программа должна формировать массив y из элементов массива x при выполнении некоторого условия, а так же выводить полученный массив y....

Что будет с указателем после использования операции delete? - C++
Имеется код: #include <iostream> using namespace std; int main() { int *wtf_ptr; wtf_ptr=new int(8);


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
02.08.2015, 15:50
Ответ Создать тему
Опции темы

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