Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6

Выделение памяти под string (разъяснения)

30.06.2014, 17:33. Показов 2705. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Можете проконсультировать меня по некоторым вопросам связанные с выделением памяти под класс string.
Вопрос 1.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
//cookie_name -> string
//cookies->data -> char *
 
string *raw = new string(cookies->data);
int start_index = -1;
 
if ((start_index = raw->find(cookie_name)) > 0) {
    int c_name_len = cookie_name.length();
    *raw = raw->substr(start_index, raw->length() - start_index);
    *raw = raw->substr(c_name_len, raw->length() - c_name_len);
    *raw = trim(*raw);
}
else {
    //TODO error
}
 
return raw;
Как в таком случае работает выделение памяти для raw? Есть ли тут какие либо утечки, и вообще грамотно ли написан код? Интересует момент с substr.


Вопрос 2.
C++
1
2
3
4
5
6
7
8
9
10
string * rsa_ecnrypt(string value) {
    ....
    unsigned char *result = new unsigned char[RSA_size(public_key)];
    if ((result_len = RSA_public_encrypt( ....
    ....
    string *result_str = new string(base64_encode(result, result_len));
    delete[] result;
 
    return result_str;
}
Есть ли тут утечка памяти и на сколько корректен код? Можно ли его оптимизировать, меня немного беспокоит выделение памяти под char, потом приходится создавать string...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.06.2014, 17:33
Ответы с готовыми решениями:

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &)
Добрый день. Как осуществляется выделения памяти под перегруженный оператор ввода данных в пользовательский тип? Ведь мы заранее не можем...

Выделение памяти под матрицу
Всем доброго времени суток! Есть такая проблема, у меня есть свой класс Cell. Мне нужно создать матрицу объектов этого типа и выделить под...

Выделение памяти под wchar_t
вот такой код: char *str=new char; strcpy(str,"stroka"); int l=strlen(str); wchar_t *wstr=new wchar_t; mbstowcs(wstr,str,l); ...

13
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
30.06.2014, 17:38
а можно поинтересоваться что это и зачем? я не переварил информацию если честно
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
30.06.2014, 17:41
В первом случае нельзя переприсваивать raw не освободив связанную с ним память, тем более, тем, что возвратит substr() и trim().
Во втором нормально, если потом будет delete для возвращаемого указателя.
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
30.06.2014, 17:42
ну так лучше не делать... неудачное исключение и утечка памяти обеспечена
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
30.06.2014, 17:44
Цитата Сообщение от nmcf Посмотреть сообщение
В первом случае нельзя переприсваивать raw не освободив связанную с ним память
Почему?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
30.06.2014, 17:45
LostCoast, зачем вообще динамически выделять память под string? Создаете проблемы на ровном месте.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
30.06.2014, 17:47
Ну потому что утечка будет, единственный указатель уничтожается.
0
30.06.2014, 17:48

Не по теме:

Цитата Сообщение от 0x10 Посмотреть сообщение
зачем вообще динамически выделять память под string? Создаете проблемы на ровном месте.
тоже не понимаю...мб в этом есть какая-то скрытая неизвестная цель)

0
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
30.06.2014, 17:50  [ТС]
0x10, частенько стал натыкаться на ошибку переполнения стека, вот и приходится выделять память динамически под большие значения. Я не так давно пишу на c++, в основном на c#.
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
30.06.2014, 17:52
Цитата Сообщение от nmcf Посмотреть сообщение
Ну потому что утечка будет, единственный указатель уничтожается.
Не вижу там присвоения указателя.
Про динамическое выделение памяти под строку +1, почему не передавать ее по ссылке?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
30.06.2014, 17:54
LostCoast, посмотрите на sizeof(std::string) - он может быть не больше того же указателя. Проблемы с переполнением стека явно из-за другого.
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
30.06.2014, 17:56
Цитата Сообщение от LostCoast Посмотреть сообщение
0x10, частенько стал натыкаться на ошибку переполнения стека, вот и приходится выделять память динамически под большие значения. Я не так давно пишу на c++, в основном на c#.
так string итак её динамичеки выделяет
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
30.06.2014, 18:08
Цитата Сообщение от LostCoast Посмотреть сообщение
частенько стал натыкаться на ошибку переполнения стека, вот и приходится выделять память динамически под большие значения.
Бывает при попытке создать большой массив примитивных типов на стеке, контейнеры стандартной плюсовой библиотеки память под данные отводят в куче динамически.
0
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
30.06.2014, 19:01  [ТС]
0x10, я использую cUrl, может быть где-то из-за него проблемы были, но когда перевел большие string, в string *, стало все работать. Поэтому подумал, что выделение памяти помогло
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.06.2014, 19:01
Помогаю со студенческими работами здесь

Выделение памяти под указатель
Доброго времени суток. Возник такой вопрос: для любой программы, насколько мне известно, выделяется свой кусочек оперативной памяти. Когда...

Выделение памяти под матрицу
Существует такой класс: class matr{ public: double **m; // адрес матрицы int mi, my; //стобцы, строки //функции ...

Выделение памяти под структуры
Когда я только знакомился с кодингом на С(С++) я скачивал с инета очень много всякой литературы... Так вот... Недавно я начал заново...

Выделение памяти под масссив
Как занести данные в двумерный массив с клавиатуры? пользователь должен сам ввести размерность

Выделение памяти под указатель
Здравствуйте форумчане,у меня возник маленький вопрос:) Почему sizeof(char) дает результат в 1 байт, а sizeof(char*) ) дает 4 байта.Как...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
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&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