Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878

И снова динамическая память, malloc и free в конструкторе и деструкторе

25.03.2015, 15:38. Показов 2260. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Короче есть, класс, который например хранит строку, я его храню в структуре, после я выдиляю динамическу память пот эту структуру и копирую её туда, после освобождаю динамическую память и завершаю процесс, при этом деструктор срабатывает только 1 раз, значит деструктор класа в динамической памяти не сработал, освобождается ли память выделаная под строку при освобождении динамической памяти в который кхранится структура с классом или очищение памяти не происходит?

вопрос наверно не сильно понятен сразу, если взглянуть на код, думаю будет понятнее

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <Windows.h>
#include <tchar.h>
#include <string>
 
using namespace std;
 
class lol
{
public:
    lol(void);
    ~lol(void);
    void Set( const wstring&);
private:
    wchar_t* test;
};
 
void lol::Set( const wstring& str){
 
    if( this->test ){
        free(test);
    }
    this->test = (wchar_t*)malloc(str.length() * sizeof(wchar_t));
}
 
lol::lol(void)
{
    this->test = (wchar_t*)malloc(20);
}
 
 
lol::~lol(void)
{
 
    free(this->test );
}
 
 
typedef struct _test{
 
    lol a;
    
} test, *LPtest;
 
 
 
int _tmain( int argc, _TCHAR *argv[ ] )
{
 
    test a;
    
    LPtest lp_test = (LPtest)malloc(sizeof(test));
    memcpy(lp_test,&a,sizeof(test));
 
    lp_test->a.Set(L"allalalala");
    
    free(lp_test);
 
    return TRUE;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.03.2015, 15:38
Ответы с готовыми решениями:

malloc и new (динамическая память)
Ребят, привет. ОЧчень интересует вопрос с динамической памятью . Как эта штука реализованна внутри ? я понимаю, что процессу выделяется в...

Как free освобождает память, выделенную через malloc?
Как функция free(void*) освобождает память выделенную malloc(). Если в malloc передавая размер malloc() знает сколько байт нужно...

Нужно, чтобы память под массив выделялась не через: new — delete, а через оператор malloc (calloc) — free
Ребят, есть программа, которая работает, но нужно, чтобы память под массив выделялась не через : new - delete, а через оператор...

4
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,562
25.03.2015, 15:42
Лучший ответ Сообщение было отмечено mh-coder как решение

Решение

malloc не вызывает конструктор, а только выделяет память. Точно также и free не вызывает деструктор.
Для того, чтобы они вызывались, используй операторы new и delete.
1
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
26.03.2015, 16:19  [ТС]
я вот попробовал сделать так

C++ (Qt)
1
2
lol * lpa = new lol[1];
delete lpa;
после delete вылетает ошибка, почему?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
26.03.2015, 16:23
delete lpa delete[] lpa
1
41 / 41 / 26
Регистрация: 24.02.2015
Сообщений: 151
26.03.2015, 16:23
mh-coder, delete[] надо, а не delete
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.03.2015, 16:23
Помогаю со студенческими работами здесь

Выделение и освобождение памяти в конструкторе и деструкторе
Есть программа с классом содержащим обьекты векторы. Однако по кончанию программы выбивате ошибку _block_type_is_vali(phead-&gt;nblockuse)....

malloc/free
Делаю устройство. Atmega16. Принимает пакеты по RF. Всего полезных данных передается 512 байт. Они влазят в 10 пакетов. Знаю...

Грабли malloc/free
С динамической памятью впервой работаю, от сюда и грабли Есть структура typedef struct { uint8_t data_size; uint8_t *data;...

Из malloc-free в new delete
Есть код с выделением памяти с помощью malloc, надо сделать с new delete Вроде сделал, освобождение памяти работает, а с выделением...

malloc, free error
Здравствуйте. Возникла следующая проблема. Код ниже: string http_headers = &quot;GET /index.asd HTTP/1.0 Host: 127.0.0.1:1101...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru