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

Ошибка выхода за пределы памяти в дебаге, в релизе ОК

02.07.2015, 16:11. Показов 1889. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу код, "для себя", так скажем. пытаюсь практиковаться. Балуюсь, другими словами.

В релизе то, что я написал, отрабатывает, в дебаге ошибка выхода за пределы памяти. Все бы ничего, но я не понимаю, почему именно в этом месте. В классе есть массив указателей. Есть метод, который, получив указатель на необходимый объект, в цикле, поочередно проверяет наличие адреса в ячейке массива, если адреса нет, то записывает адрес объекта из аргумента и выходит из цикла по брейку. и есть метод, который выводит на экран текст из объектов, на которые указывает массив или, если очередная ячейка не указывает (NULL), пишет Empty.
при отладке вываливается с ошибкой выхода за пределы памяти в месте вывода этого текста.(Необработанное исключение по адресу 0x00275BB1 в d2Calc.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCDCD.)

в видимых ресурсах пишет "inventory 0x00388c08 {0xcdcdcdcd {itemname=0xcdcdcdcd <Ошибка при чтении символов строки.> manargnmultiplex=??? ...}, ...} item *[6]" (inventory[] - это тот самый массив указателей)

При этом в релизе отрабатывает, как надо.

Кода я написал уже достаточно, поэтому выложил архив проекта.

Сразу оговорюсь, мой уровень низкий, поэтому код возможно будет резать глаза.
Вложения
Тип файла: zip d2Calc.zip (3.63 Мб, 7 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.07.2015, 16:11
Ответы с готовыми решениями:

Разные значения в дебаге и релизе
В общем в чем суть, пишу игру, участок сетевого кода написан с помощью sfml. В дебаге программа не работает, потому что изходящие и...

Ошибка из-за выхода за пределы массива
Здравствуйте! Я делаю приложение в Android Studio и столкнулся с проблемой. Я создал listView и адаптер. Мне нужен был живой поиск и я...

Ошибка выхода за пределы границ вектора
как исправить ошибку?

4
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
02.07.2015, 17:32
C++
1
item* inventory[6];
C++
1
cout<<setw(20)<<left<<inventory[j++]->itemname;   // hero.cpp 288 line
В данный моммент массив переменных типа Item* не заполнен. Тоесть нигде в коде нету

C++
1
2
3
4
5
6
for(int i=0; i < size; i++)
inventory[i] = new Item();
 
 
 
inventory[0]->setItem("SashaAndYasha");



P.S.
C++
1
2
hero(const char*,double,double,double,double,double,double,double,double,double,double,double,double,main_stat,attack_type);
    void setstathero(const char*,double,double,double,double,double,double,double,double,double,double,double,double,main_stat,attack_type);
Избегайте этого плиз
0
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 27
02.07.2015, 18:29  [ТС]
рикимару

если честно, я не понял.

1. в коде я вызывал printinventory и после того, как в нем уже были два указателя на item, т.е. частично он заполнен.
или "не заполнен" имеется ввиду другое?
2. до того, как я создал в динамической памяти объекты hero, я создавал на стеке, для теста одиночные объекты класса hero, там все работало в обоих режимах (debug/release).
3. почему тогда в релизе визуально отрабатывает корректно?
4. вы предлагаете дополнить item методами?

Не знаю, как объяснить. Мне главное понять, что не так, если честно. Не как сделать, что бы работало, а почему не работает. Я так понимаю, я неправильно использую указатели.


Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Избегайте этого плиз
сам понимаю, что получается очень неудобно и некрасиво, но как сделать лучше - не придумал.

спасибо за ответ энивей
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
02.07.2015, 18:32
Цитата Сообщение от EliteOne Посмотреть сообщение
не знаю, как объяснить. мне главное понять,
я не смотрел весь код. Я запустил код, вылезла ошибка, открываю в Visual Studio окно "Стек вызова" и смотрю с какого в какой метод пригала программа. И вижу, что она начала лететь после той строки, перезапускаю прогу с брейкпоинтом в той строке. Смотрю в дебагере массив этот и он пустой, тобишь не заполнен и не занулён. Как-то так.
0
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 27
03.07.2015, 14:03  [ТС]
в общем проблема решилась явным занулением массива в конструкторе по умолчанию.
такое чувство, что для указателей, созданных в объектах динамической памяти, состояние по умолчанию не определено
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.07.2015, 14:03
Помогаю со студенческими работами здесь

Вложенная коллекция - ошибка выхода за ее пределы
public class Test { private List&lt;List&lt;T&gt;&gt; doubleList; // вложенный список public Test() { ...

Длинная арифметика (сумма) и ошибка выхода массива за пределы
Всем доброго времени суток, ребят, пишу программу по базовым операциям на длинную арифметику, начал как наверное все начинают с суммы,...

Удаление компонента программно. Ошибка выхода за пределы массива
procedure clearImageBox ; var i:integer; begin for i:=0 to form2.ScrollBox2.ComponentCount-1 do if ...

Ошибка выхода за пределы массива при обращении к нескольким Panel
Здравствуйте. Есть 10 элементов Panel, нужно их выводить в рандомном порядке при нажатии на кнопку button1 (далее) и чтобы они повторно...

Программа работает в дебаге, но не работает в релизе
Программа должна отключать пк, через заданое время, командой консоли shutdown. public Form1() { ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
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. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru