@ksimdexxx

Найти сумму интервалов c++, вылазит ошибка?

Собственно суть задания в том, чтобы найти сумму интервалов, например сумма {1,5} {6,10} равна 8, тк 5-1 = 4 и 10-6= 4,
4+4=8. А например {1,5} {2,4} будет только 4, тк первый интервал перекрывает второй.
Вот код, который я написал и который проходит тесты по умолчанию:
int sum_intervals(std::vector<std::pair<int, int>> intervals) 
{
	int max1 = 0;						//
	for (auto a : intervals)				//Найдем самое большее число из всех интервалов
		if (max(a.second, a.first) > max1)			//
			max1 = max(a.second, a.first);			//
	vector<int> arr(max1);				// Чтобы задать размер массива
	for (int i = 0; i < intervals.size(); i++)		
		for (int j = intervals[i].first; j < intervals[i].second; j++) // По умолчанию все ячейки массива будут равны нулю
			arr[j] = 1;		// Поэтому изменяем те ячейки, которые входят в наши интервалы на другое число
	int res = 0; // наш результат
	for (auto a : arr)
		if (a != 0) // Каждый раз находя ячейку не равную нулю означает что она входит в интервалы
			res++;  // Поэтому увеличиваем результат на 1
	return res;
}

Когда пытаюсь пройти случайные тесты вылазит вот это:
double free or corruption (out)
UndefinedBehaviorSanitizer:DEADLYSIGNAL
==1==ERROR: UndefinedBehaviorSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7fec76fd99a0 bp 0x7ffd52eee560 sp 0x7ffd52eee310 T1)
==1==The signal is caused by a READ memory access.
==1==Hint: address points to the zero page.
==1==WARNING: invalid path to external symbolizer!
==1==WARNING: Failed to use and restart external symbolizer!
#0 0x7fec76fd999f (/lib/x86_64-linux-gnu/libc.so.6+0x4099f)
#1 0x7fec77022906 (/lib/x86_64-linux-gnu/libc.so.6+0x89906)
#2 0x7fec77029979 (/lib/x86_64-linux-gnu/libc.so.6+0x90979)
#3 0x7fec77030ee4 (/lib/x86_64-linux-gnu/libc.so.6+0x97ee4)
#4 0x42590b (/workspace/test+0x42590b)
#5 0x42dd19 (/workspace/test+0x42dd19)
#6 0x42be5e (/workspace/test+0x42be5e)
#7 0x42b9e8 (/workspace/test+0x42b9e8)
#8 0x42b5bb (/workspace/test+0x42b5bb)
#9 0x42eec5 (/workspace/test+0x42eec5)
#10 0x4259ed (/workspace/test+0x4259ed)
#11 0x7fec76fbab96 (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
#12 0x4045b9 (/workspace/test+0x4045b9)

UndefinedBehaviorSanitizer can not provide additional info.
==1==ABORTING

Собственно в чем потенциально может быть проблема?
  • Вопрос задан
  • 241 просмотр
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
vector<int> arr(max1);

Это на мой взгляд какая-то странная строчка. А что если max1 отрицательный? А что если он больше чем у тебя есть памяти?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы