Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 23.05.2018
Сообщений: 12
1

Что делать если при создании std::string чтение памяти из нее невозможно

10.01.2019, 13:16. Показов 2214. Ответов 14

Author24 — интернет-сервис помощи студентам
Я столкнулся с такой проблемой: у меня есть функция, которая в качестве параметра получает std::string и что-то делает с ним, но когда я в дебаггере просмотрел [базовое представление] этого объекта, то увидел, что один из элементов std::string был инициализирован адрессом 0x5e783231 <ошибка при чтении символов строки> - картинка с ошибкой в прикрепленном файле. Что делать и как это исправить?
Миниатюры
Что делать если при создании std::string чтение памяти из нее невозможно  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2019, 13:16
Ответы с готовыми решениями:

Что делать если std::string ломается
Если я пытаюсь вывести что-либо на русском, то у меня ломается текст, как это можно исправить в std::string

Что делать если при создании отчета в мастере отчетов нет кнопки итоги?
Что делать если при создании отчета в мастере отчетов нет кнопки итоги?

Что делать,если невозможно зайти в BIOS?
Всем доброго времени дня или ночи!У меня материнка ASRock AB350M Pro4.При загрузке системы не могу зайти в BIOS,нажимаю всевозможные...

14
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
 Аватар для SmallEvil
3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
19.09.2023, 15:53 6
Цитата Сообщение от VehicleMako Посмотреть сообщение
У меня та же проблема. Вдруг вы помните как её решить? Неделю ничего придумать не могу...
Ответ всё тот же :
Цитата Сообщение от DrOffset Посмотреть сообщение
Вы на ложном пути. Ищите ошибку в своем коде.
0
1 / 1 / 0
Регистрация: 17.09.2023
Сообщений: 13
19.09.2023, 16:00 7
То что ошибка в коде - это без сомнений. И на том спасибо.
0
 Аватар для SmallEvil
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' и далее подобный мусор
Миниатюры
Что делать если при создании std::string чтение памяти из нее невозможно  
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
19.09.2023, 17:07 10
Цитата Сообщение от VehicleMako Посмотреть сообщение
И на том спасибо.
Что значит "на том спасибо"? Вы же ничего не предоставили, вообще никаких данных, кода.
С такими вводными никто вам не поможет. Так что "и на том спасибо" - это максимум для вашей ситуации.

Добавлено через 2 минуты
И кстати у автора темы причина ошибки вообще не факт, что была такой же, как у вас. Расстрел памяти, или двойное удаление, из-за которых такая диагностика бывает, могут происходить по тысяче разных причин. Без кода ничего нельзя сказать наверняка.
1
1 / 1 / 0
Регистрация: 17.09.2023
Сообщений: 13
19.09.2023, 17:12 11
Извините, искренне не хотел обидеть. Вы правы.
0
 Аватар для Nishen
1355 / 854 / 365
Регистрация: 26.02.2015
Сообщений: 3,806
19.09.2023, 18:00 12
Оптимизации для проекта включены?
0
1 / 1 / 0
Регистрация: 17.09.2023
Сообщений: 13
19.09.2023, 18:13 13
Здравствуйте! Свою проблему я обнаружил, переписал буквально только что. Решение отображено в моей теме. Много искал информации на форуме, и, если кратко, решением оказалась передача в функцию указателя на 1-й элемент вектора, вместо
!неверной! передачи ссылки на [i] элемент вектора, да ещё и в цикле! (цикл у меня там был лишний абсолютно)
0
 Аватар для SmallEvil
3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
19.09.2023, 19:40 14
Цитата Сообщение от VehicleMako Посмотреть сообщение
решением оказалась передача в функцию указателя на 1-й элемент вектора
Для работы с элементами вектора существуют итераторы.
0
1 / 1 / 0
Регистрация: 17.09.2023
Сообщений: 13
20.09.2023, 00:29 15
не спорю, так и делал. ошибка после действий с вектором следовала, когда я неправильно его передавал в функцию
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2023, 00:29
Помогаю со студенческими работами здесь

Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &'
#include &lt;iostream&gt; #include &lt;stack&gt; #include &lt;sstream&gt; #include &lt;string&gt; using namespace std; int main() { string...

string,switch, что делать, если требуется сравнение русского текста
int main() { setlocale(LC_ALL, &quot;Russian&quot;); ofstream fout(FILENAME); string inner,math_count, rl = &quot;текст1&quot;; int ct = 19; ...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка error: cannot convert 'std::string {aka...

Во время отладки в Visual Studio 2015 при просмотре хедеров возникает ошибка: чтение памяти невозможно
При отладке в Visual Studio 2015 невозможно просмотреть содержимое переменных! Пишет &quot;Чтение памяти невозможно&quot; хотя значение...

Error C2440: =: невозможно преобразовать 'std::string' в 'double'
&gt;c:\users\nreshetova\documents\visual studio 2008\projects\sort3d1\sort3d1\sort3d1.cpp(73) : error C2440: =: невозможно преобразовать...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
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
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru