Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Какой заголовочный файл надо подключить, чтобы вывести значение констант CHAR_MIN и CHAR_MAX? https://www.cyberforum.ru/ cpp-beginners/ thread1786583.html
У меня почему-то не получается написать программу, которая выводит пределы значений переменных типа char. Какой заголовочный файл надо подключить чтобы вывести значение констант CHAR_MIN и CHAR_MAX?...
Создать новый объект-наследник абстрактного класса C++
Приветствую, друзья! У нас есть абстрактный класс AbstractClass и его наследники child1 и child2. В массиве у нас есть несколько экземпляров классов child1 и child2 (и неизвестно еще сколько будет)....
C++ Ошибка компиляции при реализации класса-шаблона https://www.cyberforum.ru/ cpp-beginners/ thread1786479.html
Не могу понять почему компилятор ругается. Помогите разобраться. #include <iostream> using namespace std; template <class T> class A {
C++ Как организовать шифрование данных в текстовом файле? Доброго времени суток форумчане. Я в этой теме абсолютный нуль, по-этому прошу вашей помощи. У меня есть, к примеру, файл для хранения данных о 3D модели. В нём, как известно, содержатся координаты... https://www.cyberforum.ru/ cpp-beginners/ thread1786446.html
Найти произведение элементов массива , расположенных между максимальным и минимальным элементами C++
Здравствуйте!:) Прошел несколько тем по C++ , а именно Базовые средства языка С++ и одномерные массивы . Решил по практиковаться , решил задачу. Работает вроде бы правильно , я бы хотел услышать...
C++ Почему при проходе массива с обратной стороны начальная точка отсчета n-1? https://www.cyberforum.ru/ cpp-beginners/ thread1786393.html
Почему при проходе массива с обратной стороны начальная точка отсчета n-1? #include <iostream> using namespace std; int main() { const int n=7; int i,z=0,temp=0;
C++ Определить день когда пробег спортсмена составит не менее заданного https://www.cyberforum.ru/ cpp-beginners/ thread1786391.html
В первый день спортсмен пробежал x километров, а затем он каждый день увеличивал пробег на 70% от предыдущего значения. По данному числу y определите номер дня, на который пробег спортсмена составит...
C++ Вывести на консоль все числа, удовлетворяющие условию
Помогите с написанием программы. Я "ну очень начинающая". Не могу разобраться. Напишите программу, которая выводит все числа в диапазоне от ста до десяти тысяч включительно, которые не делятся ни...
C++ Lua vs Json Добрый день, встречаю, который проект на ряду, которые связывают С++ с Lua, в частности конфигурационные файлы, которые легко могли бы быть обычными json файлами. У кого-то есть опыт работы с... https://www.cyberforum.ru/ cpp-beginners/ thread1786358.html C++ Вектора и чтение из файла и обратно (File IO) Ребят! Помогите как сможете! Я никак не могу связать перечисления между собой( И еще никак не могу сделать так, чтобы каждый раз, когда программа запускается читать все продукты из файла. /*... https://www.cyberforum.ru/ cpp-beginners/ thread1786334.html
C++ Из Excel в SQL
есть файл ексель, мне надо его полностью(ну кроме названия) переписать в скрипт три столбца +---+----+-----+ | A | B | C | +---+----+-----+ |код|назв|кодр| +---+-----+----+ ...
C++ Обработка считывания текста из файла с завершающей пустой строкой Вроде бы вопрос простой - используй fstream и живи спокойно. Так и было до поры, до времени. Был такой код: double tmp; vector<double> data; ifstream inFile("recdata.txt"); while(!inFile.eof())... https://www.cyberforum.ru/ cpp-beginners/ thread1786316.html
16495 / 8988 / 2205
Регистрация: 30.01.2014
Сообщений: 15,611
28.07.2016, 09:33 0

Как правильно освободить память - C++ - Ответ 9407919

28.07.2016, 09:33. Показов 1515. Ответов 3
Метки (Все метки)

Лучший ответ Сообщение было отмечено d7d1cd как решение

Решение

d7d1cd, зависит от стечения обстоятельств (реализации компилятора и стандартной библиотеки, режима компиляции) и типа элементов. Может быть как все нормально, так и, например, аварийное завершение программы. Поведение не определено.

Добавлено через 19 минут
d7d1cd, вот, например, демонстрация аварийного завершения программы, собранной в clang:

http://rextester.com/STBI88613

В данном случае происходит так потому, что реализация new закладывается на определенные соглашения. В частности, размер блока памяти от менеджера памяти, выделяется чуть больше, с таким запасом, чтобы хватило для дополнительного размещения значения типа size_t. Это значение используется для хранения количества элементов. Размещается оно в начале выделенной области памяти, а пользователю (то есть программисту) возвращается смещенный на sizeof(size_t) указатель, который указывает на собственно данные. delete[] знает об этом, и выполнит обратное действие: сместится назад на sizeof(size_t) получит количество элементов, обеспечит вызов соответствующего числа деструкторов, а затем отдаст указатель на выделенный блок памяти менеджеру памяти для освобождения. Если же использовать delete, то ничего этого не произодет. Будет попытка вызова одного деструктора, а затем указатель будет передан менеджеру памяти для освобождения. Но т.к. это неверный указатель (менеджер памяти не возвращал нам его: указатель был искусственно получен путем смещения на sizeof(size_t)) то корректно освободить память он не сможет, что в данном случае приводит к аварийному завершению программы.

Вернуться к обсуждению:
Как правильно освободить память C++
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2016, 09:33
Готовые ответы и решения:

Как правильно освободить память
Есть функция char* md5(const char*). Как освободить память выделенную ею? #include &lt;openssl\md5.h&gt;...

Как правильно освободить память
Написал вот такой костыль: wchar_t* getDate() { time_t seconds = time(NULL); tm timeinfo =...

Как правильно освободить память
Здрасте! (Тема: Шаблоны функций.) Не могу правильно написать метод для освобождения памяти. В...

Как правильно освободить память деструктором?
Не могу понять, как освободить память деструктором... В общем, я объявляю в private динамический...

3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2016, 09:33
Помогаю со студенческими работами здесь

Динамическая матрица. Как правильно освободить память?
int ROWS = NULL; // Объявление переменных для строк и столбцов. int COLS = NULL; cin &gt;&gt; ROWS...

Подскажите пожалуйста, как правильно освободить память
Всем ку! Подскажите пожалуйста, как правильно удалить(освободить память) массива array2D. ...

Как правильно освободить память после работы с динамическим массивом
Здравствуйте! Помогите понять в чём проблема при освобождении памяти. Простой пример: #define...

Как освободить память?
подскажите как правильно освободить память,спасибо заранее))) #include &quot;stdafx.h&quot; #include...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru