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

malloc vs new - C++

Восстановить пароль Регистрация
 
PowerLord
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
13.03.2013, 03:38     malloc vs new #1
Доброго времени суток.

Когда я для выделения памяти пользовался 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
Посмотрите здесь:

calloc vs malloc C++
malloc, realloc C++
malloc в С++ C++
malloc() C++
new на malloc C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 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
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 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() вызывается чёрти что...
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
Ответ Создать тему
Опции темы

Текущее время: 08:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru