#c #segmentation-fault
#c #ошибка сегментации
Вопрос:
Я новичок в кодировании, и поэтому, естественно, я часто сталкиваюсь с ошибками кодирования. Я постоянно сталкиваюсь с ошибками ошибки сегментации, и мне было интересно, может ли кто-нибудь объяснить, что это такое, что не так с приведенным ниже кодом и как избежать ошибок сегментации в будущем. Заранее спасибо.
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<std::vector<int> > pointers;
std::vector<int> squawkers;
int n, m, s, t, counter = 0;
std::cin >> n >> m >> s >> t;
squawkers[s] = 1;
for (int i = 0; i < m; i ) {
int a, b;
std::cin >> a >> b;
pointers[a].push_back(b);
pointers[b].push_back(a);
}
while (counter < t) {
t ;
std::vector<int> temp (n);
std::fill(temp.begin(), temp.begin() n-1, 0);
for (int i = 0; i < n; i ) {
if (pointers[i].size() != 0) {
for (int j = 0; j < pointers.size(); j )
temp[j] = squawkers[i];
}
}
squawkers = temp;
}
int sum;
for (int i = 0; i < squawkers.size(); i )
sum = squawkers[i];
std::cout << sum << std::endl;
}
Комментарии:
1. Вы использовали свой отладчик?
2. Ваши векторы
squawkers
иpointers
пусты, и вы пытаетесь получить доступ к элементам, которые не существуют. Точно так же, как в вашем последнем вопросе SO…3. Каковы ваши намерения с этой строкой
squawkers[s] = 1;
?4.
squarkers
имеет нулевой размер (т. Е.squarkers.size()
возвращает ноль), поэтому первая строкаsquarkers[s] = 1
имеет неопределенное поведение. Чтобыsquarkers[s] = 1
быть четко определенным, тестs >= 0 amp;amp; s < squarkers.size()
должен быть истинным ПЕРЕД его выполнением (после слишком поздно). Чтобы это было правдой,squarkers
необходимо изменить размер до значения, большегоs
(например, путем явного изменения размера или добавления достаточного количества элементов). Ничего из этого не произойдет, если ВЫ явно не заставите это произойти.5. Извините за это, ребята. В будущем я постараюсь быть более экономным в вопросах. Спасибо за поддержку.
Ответ №1:
Этот короткий код, извлеченный из вашего кода выше, содержит ошибку.
int main() {
std::vector<int> squawkers;
std::cin >> s;
squawkers[s] = 1;
}
Не имеет значения, какое значение s
имеет, squawkers
имеет нулевой размер, и поэтому любое использование []
для него является ошибкой.
Для новичка остальная часть вашего кода довольно продвинута. Поэтому мне странно, что существует эта простая ошибка.
Комментарии:
1. В первом
for
цикле возникает та же проблема. Они вызываютpush_back
несуществующие элементыpointers
.