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

Обнаружить, где есть попытка выйти за границы массива vector

25.02.2024, 17:26. Показов 1118. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Весь код скидывать, наверно, нет смысла, поскольку он слишком длинный, чтобы кто-то в нём разбирался.

Каким образом можно увидеть, на какой строчке моего кода происходит выход за пределы vector?
Строчка, на которую ругается Вижуал Студио, находится в коде вектора.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2024, 17:26
Ответы с готовыми решениями:

Как в данном коде не выйти за границы массива?
arr ругается на: if (array==1&&j< n - 1) Добавлено через 24 секунды как не выйти за границы массива?

Найти определённый интеграл, где границы есть сложные функции
Здравствуйте! У меня возникли проблемы с некоторыми интегралами, где границами интегрирования есть сложные функции, а сама подынтегральная...

Выхожу за границы массива, не вижу где
Сабж) помогите кто более глазастый чем я, дело в функции Sort_5 #include <bits/stdc++.h> using namespace std; void Sort_3 (int...

38
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2024, 20:24
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Сообщение от TheCalligrapher
Достаточно посмотреть при этом на Call Stack
Где это?
https://learn.microsoft.com/ru... call-stack
И гуглить картинки видео в том же направлении.
1
Злостный нарушитель
 Аватар для Verevkin
10357 / 5777 / 1275
Регистрация: 12.03.2015
Сообщений: 26,696
25.02.2024, 20:27
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Я не увидел. Не знаю, куда смотреть.
Я тоже не знаю, я ж не телепат, а видео с экрана ты мне не показываешь.
0
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
25.02.2024, 20:29  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Функция randomInt у вас генерирует случайные числа в диапазоне [x, y], включая оба конца
Чёрт, совсем забыл в этот раз про размер-1. Огромное спасибо.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2024, 20:29
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Функция randomInt у вас генерирует случайные числа в диапазоне [x, y], включая оба конца. Вот она и сгенерировала вам индекс, равный размеру массива s.krs[indNaborType][ind[0]].
Кстати, это очень тонкое и верное замечание.
Не знаю все ли, но большинство всех алгоритмов СТЛ работают в диапазоне [x,y).
И программисты, использующие её, должны это понимать и учитывать.

Но в нашем случае имеем :
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Сообщение от Verevkin
Очень крипово видеть процедурное программирование там, где есть возможность юзать ООП
Не знаю ни того, ни другого)
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,238
25.02.2024, 20:30
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Где это?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,238
25.02.2024, 20:32
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Чёрт, совсем забыл в этот раз про размер-1.
Лучше не "размер-1", а, как уже заметил SmallEvil, сделать так, чтобы генерация была в диапазоне [x, y). Полуоткрытые диапазоны встречаются в С и С++ повсеместно. Это как бы неписанная договоренность для большинства случаев.
0
Злостный нарушитель
 Аватар для Verevkin
10357 / 5777 / 1275
Регистрация: 12.03.2015
Сообщений: 26,696
25.02.2024, 20:41
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это как бы неписанная договоренность для большинства случаев.
Я в критических местах всегда ассёрты на недопустимые значения выставляю. Даже в релизных сборках! Это дёшево и очень сердито. Позволяет за минимальное время найти, где я накосячил. Иногда даже удалённо (тупо по скриншоту, присланному юзером мне в телегу).

Категорически рекомендую.
0
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
25.02.2024, 20:42  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
ассёрты на недопустимые значения выставляю
А как это делается?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2024, 20:43
Цитата Сообщение от Verevkin Посмотреть сообщение
Даже в релизных сборках!

Категорически не рекомендую.
0
Злостный нарушитель
 Аватар для Verevkin
10357 / 5777 / 1275
Регистрация: 12.03.2015
Сообщений: 26,696
25.02.2024, 20:46
Цитата Сообщение от ChioraYaz Посмотреть сообщение
А как это делается?
assert().
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,238
25.02.2024, 20:47
Цитата Сообщение от Verevkin Посмотреть сообщение
Я в критических местах всегда ассёрты на недопустимые значения выставляю.
Ну в данном случае у ТС как раз ассерт и сработал. Правда, не его ассерт, а ассерт внутри кода вектора.

Цитата Сообщение от Verevkin Посмотреть сообщение
Даже в релизных сборках!
Ассерт для релизной сброки и чисто дебажный ассерт - это обычно разные ассерты.

Ассерт - это в первую очередь формализованный метод документирования кода. Подчеркивание инвариантов, на которые опирался автор кода, существенно повышает его удобочитаемость. А уж собственно "проверяльная" функция ассерта - несомненно ценна, но идет вторым номером. Оставлять все ассерты поголовно в релизной сборке - не выглядит разумным.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2024, 20:53
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Правда, не его ассерт, а ассерт внутри кода вектора.
Мне кажется что не он.
А обычный Access violation.

Добавлено через 2 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Мне кажется что не он.
А обычный Access violation.
Почему я так думаю : ассерты большинство иде викидывает явно, еще до разбирательств, через диалог.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,238
25.02.2024, 20:56
Цитата Сообщение от SmallEvil Посмотреть сообщение
Мне кажется что не он.
А обычный Access violation.
Я запускал отладочную конфигурацию кода ТС. У меня выстрелило вот это



Подозреваю, что ТС изначально вел речь о том же самом.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2024, 21:05
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Я запускал отладочную конфигурацию кода ТС. У меня выстрелило вот это
Ну это замечательно, но я же приводил реализацию где нет никаких ассертов в операторе скобки веткора.

Добавлено через 1 минуту
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Я запускал отладочную конфигурацию кода ТС.
А ТС мог запускать релиз
0
Злостный нарушитель
 Аватар для Verevkin
10357 / 5777 / 1275
Регистрация: 12.03.2015
Сообщений: 26,696
25.02.2024, 21:12
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Оставлять все ассерты поголовно в релизной сборке - не выглядит разумным.
Я могу себе это позволить, у меня специфика работы такая. На скорость работы моего софта ассёрты не влияют. Однако, программы, которые я пишу, строго одноразовые - для управления уникальным девайсом через заданный интерфейс по заданному протоколу обмена. Я обычный человек, поэтому тоже могу где-то накосячить. И если где-нибудь в далёкой тайге ночью одна из моих прог упадёт по ассёрту, то фотка экрана с сообщением из этого ассёрта, именем файла модуля и номером строки кода в этом модуле дадут мне возможность найти и исправить баг, не вставая с кровати.

Поверь мне, это куда эффективнее, чем ехать в командировку за 9000+ км из за ошибки а-ля "Access violation at address ...". Прецеденты случались. Но не со мной! Поэтому пусть себе ассёрты тихонько сидят и в релизных билдах. Это как иметь дома огнетушитель или противогаз, или презерватив в кармане всегда таскать - лучше когда но есть и не нужен, чем когда нужен, но его нет!

Вопрос к автору темы
0
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
25.02.2024, 21:15  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
И программисты, использующие её, должны это понимать и учитывать.
Кстати, функция, в которой сейчас была ошибка, раньше была другой (временной) и тоже выдавала ошибку. Там я не забыл про размер-1, но зато погорел на генерации шанса:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//Генерация набора форм строительных блоков
void genNabor()
{
    tekNabor.clear();
    raz.clear();
 
    for (int i = 0; i < nabor.size(); i++)
    {
        //10% пропуск одной формы
        int chance = randomInt(1, 100);
        if (chance > 80) continue;
 
        tekNabor.push_back(nabor[i]); //В текущий набора добавляется форма
    }
 
    //Если пропущены все блоки, то добавить один случайный
    if (tekNabor.size() == 0)
    {
        tekNabor.push_back(nabor[randomInt(0, nabor.size() - 1)]);
    }
 
 
 
 
    //Генерация количества размеров для каждой формы
    int chance = randomInt(1, 100);
    int kolvoForm = 0;
 
    //10% = небольшое количество размеров
    if (chance >= 1 && chance < 10) kolvoForm = 1;
    //80% = нормальное количество размеров
    if (chance >= 10 && chance < 90) kolvoForm = 2;
    //10% = большое количество размеров
    if (chance >= 90 && chance < 100) kolvoForm = 3;
 
 
    int s = tekNabor.size();
    if (kolvoForm == 1)
    {
        for (int i = 0; i < s; i++)
        {
            raz.push_back(randomInt(2, 3));
        }
 
        redko++;
    }
 
    if (kolvoForm == 2)
    {
        for (int i = 0; i < s; i++)
        {
            raz.push_back(randomInt(2, 4));
        }
    }
 
    if (kolvoForm == 3)
    {
        for (int i = 0; i < s; i++)
        {
            raz.push_back(randomInt(3, 5));
        }
 
        redko++;
    }
    
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2024, 21:41
Цитата Сообщение от ChioraYaz Посмотреть сообщение
на генерации
Это особенная тема, только для игроделов.
В реале шансы статичны, их не нужно генерировать.
0
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
25.02.2024, 21:46  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
В реале шансы статичны, их не нужно генерировать.
То есть?

Цитата Сообщение от SmallEvil Посмотреть сообщение
Это особенная тема, только для игроделов.
Ну программа, которую я делаю, и нужна для одной очень не популярной инди игры.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.02.2024, 22:15
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Ну программа, которую я делаю, и нужна для одной очень не популярной инди игры.
Тогда стандартного генератора вам недостаточно.
Многое уже реализовано в STL.
Но тем не менее , вам точно понадобятся свои модификации, которіх ві сможете добиться компонуя стадартніе методі генерации, так и написав свою, но только не ранд()

По первому
Цитата Сообщение от ChioraYaz Посмотреть сообщение
В реале шансы статичны, их не нужно генерировать.
То есть?
Поживете, позанимаетесь разного рода инженерной деятельностью (к которой относится и программироавание) тогда поймете о чем я. Это выходит далеко за рамки программирования.

Добавлено через 3 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Многое уже реализовано в STL.
https://en.cppreference.com/w/cpp/numeric/random
Например. Random number distributions.

Добавлено через 3 минуты
Конкретно для генерации похожих цветов по RGB, я бы начал бв думать генерации их на основе слайдов с Н пробами.
Либо с выше мною подхдом плюс перетасовкой.

Вы должны понимать, что прикоснулись к незаконченной ветке математики, или псевдоматематики.
Математика основывается на сталых величинах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2024, 22:15
Помогаю со студенческими работами здесь

Как не дать изображению выйти за границы экрана
Здравствуйте, прошу помощи, уже всё перепробовал. Есть галерея и при клике на миниатюру открывается большое изображение, некоторые фотки...

Доработать класс Vector, который хранит в себе вектор целых чисел. У класса Vector есть: Конструктор
Доработать класс Vector, который хранит в себе вектор целых чисел. У класса Vector есть: Конструктор __init__, принимающий произвольное...

Как в xls файле обнаружить обнаружить ненужные связи?
Есть файл, в нем куча листов, плюс модули VBA... При открытии эксель спрашивает обновить ли ему связи, хотя по идее он не должен этого...

Ошибка обращения к элементам двумерного массива vector<vector<int>>
Компилируется код, но в конце выскакивает ошибка. Вот условие задачи. Её нужно решить используя вектор для создания двумерного массива. ...

Создать из матрицы два новых массива: 1) строки, где нет отрицательных чисел; 2) строки где есть отрицательные
В программе вводится двумерный массив. Из него составляются два новых массива: в первый из них включаются те строки исходного массива, где...


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru