0 / 0 / 0
Регистрация: 27.12.2023
Сообщений: 3
|
||||||||||||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||||||||||||
Найти утечку памяти27.12.2023, 16:37. Показов 1141. Ответов 21
Всем привет! У меня задание:
Сформировать новую строку, удалив из исходной строки идущие подряд пробелы (оставить только один), также пробелы в начале и в конце строки _abc___def___ //Expects output (return 0): abc_def Сформировать новую строку из двух исходных, добавив в первую все символы, встречающиеся во второй и являющиеся десятичными цифрами abc_def //Expects output (return 0) with second string "g1h2k": abc_def12 Помогите ,пожалуйста, выявить утечку памяти, и если возможно, подскажите, как её устранить! Очень буду благодарен. Вот мой код //main.cpp
0
|
27.12.2023, 16:37 | |
Ответы с готовыми решениями:
21
Найти утечку памяти программно Найти и устранить утечку в памяти при сортировке массива Выделение памяти, проверка на утечку памяти Выдает утечку памяти Проверка на утечку памяти |
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
|
|
27.12.2023, 18:08 | 2 |
А почему ты считаешь, что она есть?
0
|
449 / 415 / 124
Регистрация: 03.02.2013
Сообщений: 1,295
|
|
27.12.2023, 18:11 | 3 |
А нет варианта сменить парадигму мышления и отказаться от new/delete в C++ впринципе, а не месить вот это всё? Поверьте, когда Вам действительно будут нужны new/delete Вы это почувствуете, и на том уровне не будет вопросов как найти утечку памяти.
В C++ есть STL, использовать её, если не хватает её - есть классы, со встроенным механизмом конструкторов/деструкторов, в которых можно из базовых элементов STL слепить желаемое без new/delete
1
|
0 / 0 / 0
Регистрация: 27.12.2023
Сообщений: 3
|
|
27.12.2023, 18:32 [ТС] | 4 |
валгринд ругается
Код
Valgrind Analysis: 1. UninitCondition: Conditional jump or move depends on uninitialised value(s) - `sivkov::deleteSpace(char*)` removing_spaces.cpp:6 - `main` main.cpp:18 2. UninitCondition: Conditional jump or move depends on uninitialised value(s) - `sivkov::copyNum(char*, char*)` copyNum.cpp:10 - `main` main.cpp:37 3. UninitCondition: Conditional jump or move depends on uninitialised value(s) - `sivkov::copyNum(char*, char*)` copyNum.cpp:14 - `main` main.cpp:37 4. Leak_DefinitelyLost: - `operator new[](unsigned long)` /vg_replace_malloc.c:423 - `sivkov::addString(unsigned long&)` inputString.cpp:11 - `main` main.cpp:10 Добавлено через 33 секунды Добавлено через 1 минуту нам через new/delete[] нужно все делать((((
0
|
фрилансер
5832 / 5349 / 1100
Регистрация: 11.10.2019
Сообщений: 14,307
|
|
27.12.2023, 18:33 | 5 |
а ещё в коде есть UB
Добавлено через 1 минуту тогда их использование нужно инкапсулировать в свои классы
0
|
0 / 0 / 0
Регистрация: 27.12.2023
Сообщений: 3
|
|
27.12.2023, 18:36 [ТС] | 6 |
0
|
фрилансер
5832 / 5349 / 1100
Регистрация: 11.10.2019
Сообщений: 14,307
|
|
27.12.2023, 18:39 | 7 |
eXint_4, на то оно и UB, что кажется, что всё нормально А суслик есть
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
27.12.2023, 19:02 | 8 |
Как выше сказали, декомпозицию тогда проведите. Сначала пишите свой класс, который занимается управлением памятью, отдельно его тестируете, а потом на его основе делайте остальную программу. Код у вас сложный и трудноотлаживаемый именно потому, что операции по работе с памятью размазаны по остальной логике программы. Как только разделите эти два момента, программа мгновенно станет проще и отладка проще и утечек у вас тоже не будет.
0
|
446 / 314 / 62
Регистрация: 09.03.2016
Сообщений: 3,050
|
||||||
27.12.2023, 20:21 | 9 | |||||
а где утечка?
Если ты эту беду написал, должен знать.... Я ни разу не спросил ... А где у меня утечка.?
Я прошлый раз написал, меня заминусовали сразу.
0
|
446 / 314 / 62
Регистрация: 09.03.2016
Сообщений: 3,050
|
|
27.12.2023, 20:36 | 10 |
0
|
446 / 314 / 62
Регистрация: 09.03.2016
Сообщений: 3,050
|
|
27.12.2023, 21:00 | 11 |
А если ты удалил память, которою не выделял, или выехал из массива,
Какая это утечка? Добавлено через 15 минут Что за мода. Написать большую кучу мусора, И потом в ней утечку искать. Отдельно, по маленькой кучке, ни пробовал?
0
|
Вездепух
12761 / 6644 / 1788
Регистрация: 18.10.2014
Сообщений: 16,801
|
||||||
27.12.2023, 22:02 | 12 | |||||
Ну так вот же она, сидит открытым текстом
delete[] на заведомо нулевой указатель?При этом в остальном коде ничего подобного не видно. Как так могло получиться? Два разных человека писало?
1
|
446 / 314 / 62
Регистрация: 09.03.2016
Сообщений: 3,050
|
|
27.12.2023, 22:11 | 13 |
Молодец...
0
|
Вездепух
12761 / 6644 / 1788
Регистрация: 18.10.2014
Сообщений: 16,801
|
|
27.12.2023, 22:26 | 14 |
Зачем это включено? В коде вы упорно избегаете использования
std::string (иначе не было бы всех этих ошибок), но зачем-то включили <string> ¯\_(ツ)_/¯Для этого нужно #include <cctype> .Я не вижу в задании никаких запретов на использование стандартных функций из <cstring> . Более того, <cstring> вы сами уже включили.К чему тогда здесь все эти ручные реализации strlen , strcpy и т.п.?Что это за загадочные манипуляции с string1 ? В чем смысл присваивания nullptr ? Почему было не написать просто return nullptr; ?Также: оператор new[] никогда не возвращает нулевой указатель. В случае ошибок он бросает исключения. Поэтому все ваши проверки на nullptr после new[] - бессмысленны.Если вы хотите, чтобы он возвращал нулевой указатель в случае ошибки, вам нужен (nothrow) вариант.
0
|
27.12.2023, 22:38 | 15 |
Алексей1153, я так понимаю вообще опасно использовать <cctype> и <cwctype>... Недавно нужно было использовать
std::iswdigit . Вот только проблема в том, что данная функция может возвращать true , даже если не цифра 0-9, а например, какой-нибудь китайский иероглиф, означающий цифру. В итоге написал свою функцию, чтобы с локалями не возиться.
0
|
фрилансер
5832 / 5349 / 1100
Регистрация: 11.10.2019
Сообщений: 14,307
|
||||||
27.12.2023, 22:50 | 16 | |||||
Royal_X, нужно всего лишь прочитать доку. И, да, если поведение не устраивает, никто не мешает костыль нарисовать
Добавлено через 6 минут её и писать-то не нужно:
0
|
фрилансер
5832 / 5349 / 1100
Регистрация: 11.10.2019
Сообщений: 14,307
|
|
28.12.2023, 05:06 | 18 |
Royal_X, это слишком просто
и зачем двумя, можно одним а так - да, конечно, если в случае цифр. Но могло понадобиться искать кроме цифры ещё какой-то символ, вот тогда вью зажигает. Парсеры на паре std::string_view + std::from_chars получаются быстрые и не капризные ко всяким локалям
0
|
KSergey9
|
28.12.2023, 08:53
#19
|
Не по теме: Локали - зло! Особенно то, как их добавили - прямо в старые добрые функции, просто перехерачив обратную совместимость. Собственно больше половины вопросов по локалям (хотя я думаю до 90%) про то, как их отключить. Это уже не говоря про то, что инициализация локалей занимает прорву времени и появилось это внезапно на старом коде. Нет бы ввести новые функции с локалями. Тогда тем резким умельцам, кому это действительно надо - точечно бы их использовали.
0
|
DrOffset
|
28.12.2023, 13:21
Найти утечку памяти
#20
|
0
|
28.12.2023, 13:21 | |
28.12.2023, 13:21 | |
Помогаю со студенческими работами здесь
20
Как отследить утечку памяти? Каким образом отслеживать утечку памяти? Имеет ли этот код утечку памяти? Удаление из вектора указателей и предотвратить утечку памяти Программа для проверки кода на утечку памяти. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |