|
0 / 0 / 0
Регистрация: 30.01.2019
Сообщений: 2
|
||||||
Как выделить память под длинную строку?30.01.2019, 20:34. Показов 2404. Ответов 4
Метки нет (Все метки)
Всем привет. Мне нужно сделать поразрядную сортировку пар ключ(число от 0 до 2^64) значение(строка не больше 2048 символов) по ключу. Для этого кидаю эти пары в структуру, а дальше в список(не stl). Так вот, когда я ввожу такие пары со значениями небольшой длины, например:
122 fdeTYf 4 b 13 Ttre то список сортируется. Но если ввести пары, где есть длинное значение, например: 122 CCCDMFJENFQQQWWWWWWWWWWffffffffdfgdfgsfg sdfgsdfgsdfg 0 r 2 fdgdfg то программа зависает. Если смотреть по отладчику, то программа не может выделить память под структуру temp = new slist;, не доходя даже доходя до temp->value = string(value);. Почему так происходит?
0
|
||||||
| 30.01.2019, 20:34 | |
|
Ответы с готовыми решениями:
4
Как правильно выделить память под структуру?
Как выделить память под динамический двумерный массив |
|
Мозгоправ
|
||||||
| 30.01.2019, 21:24 | ||||||
Сообщение было отмечено Bale как решение
Решение
Bale, вот это
Следовательно последующий scanf() затирает принятой строкой всё, что находится по адресу value + 1. Т.к. блоки памяти, которые выделяются в куче, имеют выравнивание (в вашем случае, похоже, по границе 8 байт; т.е. адрес начала делится на 8), то короткие строки умещаются до начала следующего блока. А динные портят память в куче.PS. Если не секрет, зачем такое изощрённое извращение с сортировкой самопального списка? Хранить данные в стандартном контейнере и написать функцию сравнения для std::sort() не судьба?
0
|
||||||
|
0 / 0 / 0
Регистрация: 30.01.2019
Сообщений: 2
|
|
| 30.01.2019, 21:57 [ТС] | |
|
Спасибо огромное. Я студент и в задании сказано не использовать стандартные сортировки и структуры. А как тогда можно выделять динамически память ровно под введенную строку, т.е. чтобы не выделять всегда под максимальные 2048 символов char * value = new char[2048];
0
|
|
|
2622 / 1633 / 266
Регистрация: 19.02.2010
Сообщений: 4,335
|
||
| 30.01.2019, 22:31 | ||
|
0
|
||
|
Мозгоправ
|
||||||||
| 31.01.2019, 00:56 | ||||||||
Сообщение было отмечено Bale как решение
Решениеstd::string? Вы используете эту стандартную структуру. (Кстати, вы включили для неё не тот заголовок. Удивительно, как вы измудрились это откомпилировать.)Во-вторых, вы выделяете буфер до того момента, как будет введена строка. Поэтому длина строки по любому неизвестна. И никакой strlen() тут не поможет. А потом вы присваиваете строку из буфера char* полю структуры типа string. И тут уже string сам выделит тот объём памяти, который посчитает необходимым. Кстати, здесь
Для того, что бы освободить память от списка, нужно пройтись по всему списку и аккуратно уничтожить каждый элемент.
0
|
||||||||
| 31.01.2019, 00:56 | |
|
Помогаю со студенческими работами здесь
5
Как правильно выделить память под двумерный массив в шаблоне? Как выделить память под динамические переменные при создании класса?
Выделить память строго под вводимую строку Как выделить память под двумерный массив Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|