0 / 0 / 0
Регистрация: 23.05.2018
Сообщений: 12
|
|
1 | |
Что делать если при создании std::string чтение памяти из нее невозможно10.01.2019, 13:16. Показов 2214. Ответов 14
Я столкнулся с такой проблемой: у меня есть функция, которая в качестве параметра получает std::string и что-то делает с ним, но когда я в дебаггере просмотрел [базовое представление] этого объекта, то увидел, что один из элементов std::string был инициализирован адрессом 0x5e783231 <ошибка при чтении символов строки> - картинка с ошибкой в прикрепленном файле. Что делать и как это исправить?
0
|
10.01.2019, 13:16 | |
Ответы с готовыми решениями:
14
Что делать если std::string ломается Что делать если при создании отчета в мастере отчетов нет кнопки итоги? Что делать,если невозможно зайти в BIOS? |
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
|
|
10.01.2019, 14:38 | 2 |
А действительно ли надо лезть во внутреннее представление std::string?
Компиляторы используют разные оптимизации для хранения коротких строк. Можно погуглить small string optimization и найти много чего, например https://shaharmike.com/cpp/std-string/ Идея такой оптимизации в том, что для хранения таких коротких строк, как "12x^2y", память в куче не используется. Соответственно в _Ptr, который очень даже может указывать именно на такую память, содержится мусор.
0
|
0 / 0 / 0
Регистрация: 23.05.2018
Сообщений: 12
|
|
10.01.2019, 19:47 [ТС] | 3 |
Так я бы не задавался этим вопросом, не возникни проблема: когда я вызываю метод std::string substr(), то возвращается неправильное значение(как использовать метод я знаю), а в окошке дебаггинга пишется, что эта функция вернула <ошибка чтения символов строки>. Причем вызываю я его несколько раз, и иногда все нормально работает, а иногда нет(этот вопрос я уже задавал на других форумах и ответа, как это исправить не получил).
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
10.01.2019, 19:57 | 4 |
![]() Решение
Вы на ложном пути. Ищите ошибку в своем коде.
Проявиться ошибка может далеко за пределами места ее возникновения. Это нормально.
0
|
1 / 1 / 0
Регистрация: 17.09.2023
Сообщений: 13
|
|
19.09.2023, 15:47 | 5 |
Здравствуйте! У меня та же проблема. Вдруг вы помните как её решить? Неделю ничего придумать не могу...
0
|
![]() 3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
|
|
19.09.2023, 15:53 | 6 |
0
|
1 / 1 / 0
Регистрация: 17.09.2023
Сообщений: 13
|
|
19.09.2023, 16:00 | 7 |
То что ошибка в коде - это без сомнений. И на том спасибо.
0
|
![]() 3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
|
|
19.09.2023, 16:26 | 8 |
А как вы представляете поиск ошибки без представления самого листинга ?
0
|
1 / 1 / 0
Регистрация: 17.09.2023
Сообщений: 13
|
|
19.09.2023, 16:32 | 9 |
Да вот, листаю, смотрю Интернет, меняю параметры, смотрю что не так. В классе у меня поле string, но <чтение памяти невозможно> | тип const char * const.
в сам string я записываю данные, и они лежат как: 'И\0', 'м\0', 'я\0', ' \0', ' \0' ,' \0', ' 2в34\0' и далее подобный мусор
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
19.09.2023, 17:07 | 10 |
Что значит "на том спасибо"? Вы же ничего не предоставили, вообще никаких данных, кода.
С такими вводными никто вам не поможет. Так что "и на том спасибо" - это максимум для вашей ситуации. Добавлено через 2 минуты И кстати у автора темы причина ошибки вообще не факт, что была такой же, как у вас. Расстрел памяти, или двойное удаление, из-за которых такая диагностика бывает, могут происходить по тысяче разных причин. Без кода ничего нельзя сказать наверняка.
1
|
1 / 1 / 0
Регистрация: 17.09.2023
Сообщений: 13
|
|
19.09.2023, 17:12 | 11 |
Извините, искренне не хотел обидеть. Вы правы.
0
|
1 / 1 / 0
Регистрация: 17.09.2023
Сообщений: 13
|
|
19.09.2023, 18:13 | 13 |
Здравствуйте! Свою проблему я обнаружил, переписал буквально только что. Решение отображено в моей теме. Много искал информации на форуме, и, если кратко, решением оказалась передача в функцию указателя на 1-й элемент вектора, вместо
!неверной! передачи ссылки на [i] элемент вектора, да ещё и в цикле! (цикл у меня там был лишний абсолютно)
0
|
![]() 3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
|
|
19.09.2023, 19:40 | 14 |
0
|
1 / 1 / 0
Регистрация: 17.09.2023
Сообщений: 13
|
|
20.09.2023, 00:29 | 15 |
не спорю, так и делал. ошибка после действий с вектором следовала, когда я неправильно его передавал в функцию
0
|
20.09.2023, 00:29 | |
Помогаю со студенческими работами здесь
15
Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &' string,switch, что делать, если требуется сравнение русского текста ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri Во время отладки в Visual Studio 2015 при просмотре хедеров возникает ошибка: чтение памяти невозможно Error C2440: =: невозможно преобразовать 'std::string' в 'double' Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Новые блоги и статьи
![]() |
||||
std::mutex в C++: Хитрости и тонкости использования
Wired 03.03.2025
В C++ ключевым инструментом для обеспечения корректной работы параллельных процессов выступает std::mutex – примитив синхронизации, появившийся в стандарте C++11. До его появления использовали. . .
|
std::span в C++: Производительность и практическое использование
Wired 03.03.2025
Традиционная работа с указателями и массивами часто приводит к ошибкам и уязвимостям в безопасности. Именно поэтому в C++20 появился std::span - легковесная обертка, обеспечивающая безопасный. . .
|
std::span в C++: Константность и безопасность типов
Wired 03.03.2025
std::span - представитель семейства view-типов, появившийся в стандарте C++20. Этот компонент предоставляет легковесное и эффективное решение для работы с непрерывными последовательностями данных,. . .
|
std::span в C++: Subview и Slice
Wired 03.03.2025
std::span - невладеющий тип данных C++, который предоставляет гибкий интерфейс для работы с непрерывными последовательностями элементов. Этот тип существенно упрощает обработку массивов и. . .
|
std::span в C++: Доступ к элементам и итерирование
Wired 03.03.2025
Появление std::span в стандарте C++20 стало значительным шагом вперед, предоставив разработчикам средство для безопасного и производительного доступа к непрерывным последовательностям элементов. . . .
|
std::span в C++: Управление массивами данных без владения
Wired 03.03.2025
Новый класс std::span, появившийся в стандарте C++20, открывает возможности для оптимизации работы с последовательными наборами данных. По сути, это легковесная обертка, которая предоставляет доступ. . .
|
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
|
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
|
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
|
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
|