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

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

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

malloc vs new - C++

13.03.2013, 03:38. Просмотров 901. Ответов 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 ещё и инициализирует объект
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 03:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос malloc vs new (C++):

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

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

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

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

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

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

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

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

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

Это проблема чёрт знает в чём, если (WCHAR*) malloc(sizeof(WCHAR) *1000) не работает, а new WCHAR[1000] работает. Утечки не от них самих зависят. Не знаю, разве что <cstdlib> не подключена и вместо malloc() вызывается чёрти что...
0
PowerLord
1 / 1 / 0
Регистрация: 10.02.2013
Сообщений: 50
13.03.2013, 04:12  [ТС] #5
OhMyGodSoLong, Спасибо, успокоили
А то я уже второй день проверяю весь код и ищу, где мог не освободить память.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 04:12
Привет! Вот еще темы с ответами:

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

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

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

Функция Malloc - C++
Помогите изучить функцию Malloc что она делает или дайте учебник где она описана! Начальный курс давно закончил, хорошо разбираюсь в...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
13.03.2013, 04:12
Ответ Создать тему
Опции темы

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