81 / 40 / 22
Регистрация: 03.05.2013
Сообщений: 694
1

Malloc realloc и C++

30.04.2015, 08:25. Показов 1569. Ответов 10
Метки нет (Все метки)

Подскажите, в C++ 11 выделение памяти по прежнему "нормально" выделять с помощью malloc и изменять размер realloc ? Или это уже прошлое? Какие альтернативы? Что быстрее? Видел пост стаковерлов там пишут, мол не используйте, а используйте new. Но new не умеет расширятся как делает это realloc.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2015, 08:25
Ответы с готовыми решениями:

malloc, realloc
У меня задан одномерный динамический массив таким образом: int *m1=new int; //n-количество...

malloc/realloc
есть следующий код: mmlist=(_mathmod*)malloc(sizeof(_mathmod)); ...

Помогите переделать malloc в realloc!
Нужно что бы распределение памяти было realoc-ом, помогите пожалуйста Красным выделен malloc ...

функции на основе realloc, malloc
Подскажите как сократить написание "realloc", а то надоели эти писанины))) вот сделал уже...

10
Ушел с форума
Эксперт С++
16450 / 7414 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
30.04.2015, 08:44 2
malloc/free и new/delete - это разные вещи, у них несколько
важных различий (на форуме обсуждалось несколько раз, поищите).
В C++ можно применять обе конструкции, но для создания и
уничтожения объектов следует использовать именно new/delete.
0
81 / 40 / 22
Регистрация: 03.05.2013
Сообщений: 694
30.04.2015, 09:03  [ТС] 3
Не совсем понял
но для создания и
уничтожения объектов следует использовать именно new/delete.
Не могли бы вы привести пример.
0
Ушел с форума
Эксперт С++
16450 / 7414 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
30.04.2015, 09:06 4
Лучший ответ Сообщение было отмечено zasadadada как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cstdio>
 
struct sample
{
    sample()
    {
        printf("Constructor\r\n");
    }
 
    ~sample()
    {
        printf("Destructor\r\n");
    }
};
 
int main()
{
    sample * p = new sample();
    delete p;
    return 0;
}
> Constructor
> Destructor
При использовании malloc/free конструктор и деструктор
класса sample вызваны не будут.
2
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 330
17.02.2019, 16:19 5
У меня такой вопрос, сможет ли free() корректно освободить память, если эта память была веделенна под массив с использованием new[]
или нужно использовать именно malloc() ?

Добавлено через 2 минуты
И противоположная ситуация если выделять память через re/malloc, как поведет себя delete[] если ему дать указатель от си функций. ?
0
Параллельный Кот
1904 / 826 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
17.02.2019, 16:41 6
Fakels, поведение зависит от реализации. Может быть выполнится корректно, а может быть и нет. Зачем вам смешивать два разных способа?
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 330
17.02.2019, 17:13 7
Ну я хакнулся в чужую программу написанная видимо на С, там освобождается через free, а в своей я делаю новое выделение с new[] и подменяю указатель, вот и спрашиваю, чем мне выделять лучше.
Память под новый массив выделяется простого типа, без всяких конструкторов.
0
Параллельный Кот
1904 / 826 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
17.02.2019, 17:19 8
Fakels, если эти две программы собраны с разными библиотеками времени исполнения, то нет никакой гарантии, что даже функции из одного набора будут работать корректно. Например, при разработке подключаемых библиотек выделением и освобождением памяти занимается одна и та же сторона. Если память выделяется библиотекой, то в ней же и должна быть предусмотрена функция освобождения этой памяти.
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 330
17.02.2019, 17:27 9
Ого вот так новость.
Ну там освобождается по завершению приложения.
Думаете будет утечка, или ос сама потом освободит?
0
зомбяк
1564 / 1213 / 345
Регистрация: 14.05.2017
Сообщений: 3,935
17.02.2019, 17:29 10
будет утечка
0
Комп_Оратор)
Эксперт по математике/физике
8758 / 4500 / 605
Регистрация: 04.12.2011
Сообщений: 13,428
Записей в блоге: 16
17.02.2019, 19:00 11
Fakels, есть перефразировка известного утверждения Тараса Бульбы (Гоголь Н.В.) :
-"Чем тебя породил, тем и убью!"
То есть, Николай Васильевич знал золотое правило создания/уничтожения - освобождайте тем функционалом которыым было выделено: malloc/free, new/delete.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2019, 19:00
Помогаю со студенческими работами здесь

Выделение памяти malloc realloc
мне задачу поставили, надо не используя stl, загрузить из файла данные. r - строки с - это...

Работа с памятью через malloc,realloc и free
Вот начал работать с памятью в c++ и появилось несколько вопросов. 1 - r = (int...

Что быстрее/эффективнее malloc/realloc или new/delete?
Всем привет. Год программировал на СИ под микроконтроллеры... Начал изучать с++... Всё ново,...

Можно ли выделять память под объект класса с помощью функций calloc, malloc или realloc?
Интересует данный вопрос. Можно ли и имеет ли вобще смысл например выделять память под объект...


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

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

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