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

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

Войти
Регистрация
Восстановить пароль
 
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
#1

Как правильно освободить память - C++

07.04.2014, 19:26. Просмотров 437. Ответов 4
Метки нет (Все метки)

Есть функция char* md5(const char*). Как освободить память выделенную ею?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <openssl\md5.h>
char* md5(const char* text)
{
    unsigned char hash[16];
    char * hashHex = (char*) malloc(32);
    MD5((unsigned char*)text,strlen(text), hash);
    sprintf(hashHex, "%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x",
        hash[0], hash[1], hash[2], hash[3], hash[4], hash[5], hash[6], hash[7],
        hash[8], hash[9], hash[10], hash[11], hash[12], hash[13], hash[14], hash[15]);
    return hashHex;
}
 
int main()
{
    for(int i = 0; i < 10; i++)
    {
        char* hash = md5("123");
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2014, 19:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно освободить память (C++):

Как правильно освободить память - C++
Здрасте! (Тема: Шаблоны функций.) Не могу правильно написать метод для освобождения памяти. В мейне делаю все необходимые мне...

Как правильно освободить память - C++
Написал вот такой костыль: wchar_t* getDate() { time_t seconds = time(NULL); tm timeinfo = *(localtime(&amp;seconds)); return...

Как правильно освободить память - C++
Здравствуйте все! Подскажите, как правильно освобождать память, выделенную под массив оператором new? int *Arr = new int; ... delete...

Как правильно освободить память деструктором? - C++
Не могу понять, как освободить память деструктором... В общем, я объявляю в private динамический массив на 3 элемента, после чего память от...

Подскажите пожалуйста, как правильно освободить память - C++
Всем ку! Подскажите пожалуйста, как правильно удалить(освободить память) массива array2D. Array1D&lt;Elem&gt;* array2D = ...

Как правильно освободить память после работы с динамическим массивом - C++
Здравствуйте! Помогите понять в чём проблема при освобождении памяти. Простой пример: #define _CRT_SECURE_NO_WARNINGS #include...

4
zss
Модератор
Эксперт С++
6401 / 5967 / 1944
Регистрация: 18.12.2011
Сообщений: 15,362
Завершенные тесты: 1
07.04.2014, 19:42 #2
C++
1
free(hash);
Но в С++ принято использовать new-delete
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
char* md5(const char* text)
{
    unsigned char hash[16];
    char* hashHex =new char[32];
    MD5((unsigned char*)text,strlen(text), hash);
    sprintf(hashHex, "%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x",
        hash[0], hash[1], hash[2], hash[3], hash[4], hash[5], hash[6], hash[7],
        hash[8], hash[9], hash[10], hash[11], hash[12], hash[13], hash[14], hash[15]);
    return hashHex;
}
 
int main()
{
    for(int i = 0; i < 10; i++)
    {
        char* hash = md5("123");
        delete[] hash;    
    }
 
    return 0;
}
...
0
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
07.04.2014, 20:19  [ТС] #3
zss, пытался, на данный код CRT отвечает "CRT detected that the application wrote to memory after end of heap buffer.".
P.S. Так же как и на malloc/free

Добавлено через 22 минуты
Тема закрыта.
C++
1
2
3
4
5
6
7
8
9
char* md5(const char* text)
{
    unsigned char hash[MD5_DIGEST_LENGTH];
    char hashHex[33];
    MD5((unsigned char*)text,strlen(text), (unsigned char*)&hash);
    for(int i = 0; i < 16; i++)
         sprintf(&hashHex[i*2], "%02x", (unsigned int)hash[i]);
    return hashHex;
}
0
zss
Модератор
Эксперт С++
6401 / 5967 / 1944
Регистрация: 18.12.2011
Сообщений: 15,362
Завершенные тесты: 1
07.04.2014, 20:26 #4
Цитата Сообщение от Koncord Посмотреть сообщение
char hashHex[33];...return hashHex;
Нельзя возвращать временный объект.
0
Koncord
5 / 5 / 1
Регистрация: 27.09.2012
Сообщений: 65
07.04.2014, 20:46  [ТС] #5
уже понял
C++
1
2
3
4
5
6
7
8
9
char* md5(const char* text)
{
    unsigned char digest[MD5_DIGEST_LENGTH];
    char *hash = new char[33];
    MD5((unsigned char*)text,strlen(text), (unsigned char*)&digest);
    for(int i = 0; i < 16; i++)
         sprintf(&hash[i*2], "%02x", (unsigned int)digest[i]);
    return hash;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 20:46
Привет! Вот еще темы с ответами:

Как освободить память? - C++
подскажите как правильно освободить память,спасибо заранее))) #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;string.h&gt; ...

как освободить память? - C++
Здравствуйте!!! Почему-то никак не освобождается память, выделенная оператором new под двумерный массив типа char,- как только идет...

Как освободить память быстро? - C++
Функция malloc неправильно работает...Заполняется память быстро,а очищается долго,с чем это связано,кто знает #include&lt;iostream&gt; ...

Как освободить память из-под вектора объектов? - C++
vector&lt;TObj*&gt; obj; obj.push_back(new obj()); obj.erase(obj.begin()+indx);//удаляю указатель который указывал на объект &quot;Для...


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

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

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