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

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

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

malloc vs new - C++

13.03.2013, 03:38. Просмотров 869. Ответов 4
Метки нет (Все метки)

Доброго времени суток.

Когда я для выделения памяти пользовался malloc/calloc и освобождал с помощью free, у меня вылетала ошибка:
ОС Windows инициировала точку останова в SSL_sockets.exe.
Это может быть вызвано повреждением кучи и указывает на ошибку в SSL_sockets.exe или в одной из загруженных им DLL.

Память выделяю под строку типа wchar_t.
Например, сломалось на выделении памяти:
C++
1
WCHAR* temp = (WCHAR*) malloc(sizeof(WCHAR) *1000);
почему такое может быть? может ли так произойти из-за того что в этот кусок памяти попала неосвобождённая где-то память?

причём когда поменял malloc/free на new/delete всё заработало нормально.

И второй вопрос: чем отличаются malloc/free и new/delete?
Заметил что при выделении памяти под объект malloc просто выделяет кусок памяти, а new ещё и инициализирует объект
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 03:38     malloc vs new
Посмотрите здесь:

Malloc vs new - C++
Здравствуйте. Вникаю в ручное управление памятью. Абзац из книги "C++ для профессионалов" не совпадает с моим представлением...

new на malloc - C++
Измените выделение памяти на C - malloc,и почему у меня не открывает текстовый файл? #include "stdafx.h" #include <string.h> ...

malloc в С++ - C++
Подскажите пожалуйста как в данной программе выделить динамическую память с помощью malloc для объекта #include <iostream> ...

malloc() - C++
4to takoe malloc(), za4em nam ono nujno? pomogite=)))))))

new vs malloc - C++
Чем new безопаснее(или лучше?) malloc?

new, malloc, - C++
Добрый день. При роботе с дин. памяттю в конец выделяемой памяти добавляеться какойто бред, чтото топа "<<<ЮЮЮээээ". Почему так...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 03:43     malloc vs new #2
Отличаются вот тем, о чём вы сказали, плюс malloc() в случае проблем возвращает NULL, а new (по умолчанию) бросает исключение std::bad_alloc (но может тоже NULL возвращать). Возвращаемое значение надо всегда проверять.

Вероятно, WCHAR — это всё же не простой тип у вас. Потому и new работает, что вызывает конструкторы, которые всё организуют. А если использовать malloc(), то объекты остаются неинициализированными и всё падает. А может и просто перепутали где-то индексы (выделили 1000, пишете 10000). Или забыли последний байт. Или ещё что.
PowerLord
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
13.03.2013, 03:54  [ТС]     malloc vs new #3
WCHAR это wchar_t.
В том то и дело, что падает при выделении памяти. на той строке кода, что я привёл.

А посему главный вопрос, интересующий меня: если в программе проблемы с памятью при использовании malloc, не будет ли утечки памяти после простой замены malloc на new? Т.е. это проблема в malloc, или в том что я память где-то не освободил?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.03.2013, 04:04     malloc vs new #4
Да всё окей. Только free() на delete тоже поменяйте тогда.

Это проблема чёрт знает в чём, если (WCHAR*) malloc(sizeof(WCHAR) *1000) не работает, а new WCHAR[1000] работает. Утечки не от них самих зависят. Не знаю, разве что <cstdlib> не подключена и вместо malloc() вызывается чёрти что...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 04:12     malloc vs new
Еще ссылки по теме:

New и malloc - C++
Если смотреть на выделение памяти для арифметических типов уступает ли функций new malloc'у в скорости? Если да, то насколько это критично?

malloc/realloc - C++
есть следующий код: mmlist=(_mathmod*)malloc(sizeof(_mathmod)); *mmlist=_mathmod(mm); int i=0; ...

new/malloc align - C++
Обращают ли внимание new/malloc на установленый align для структуры? Так, например: struct __declspec(align(32)) Circle { float...

Ошибка с malloc - C++
Задание: Написать программу, содержащую процедуры формирования и просмотра списка и подпрограмму проверки наличия в списке заданного...

malloc vs. calloc - C++
Когда стоит использовать malloc , а когда calloc?

calloc vs malloc - C++
Объясните,пжлста,чем отличается malloc oт calloc?


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

Или воспользуйтесь поиском по форуму:
PowerLord
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
13.03.2013, 04:12  [ТС]     malloc vs new #5
OhMyGodSoLong, Спасибо, успокоили
А то я уже второй день проверяю весь код и ищу, где мог не освободить память.
Yandex
Объявления
13.03.2013, 04:12     malloc vs new
Ответ Создать тему
Опции темы

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