У меня проблема при работе с векторами класса.Я старался максимально сократить количество кода, оставив мне код ниже.Тем не менее, после этого я все еще не могу понять, почему моя программа падает.Я из мира VBA, и мои навыки отладки в C ++, по меньшей мере, плохие, и я прошу прощения за это заранее.Любое руководство по улучшению моих способностей здесь будет с радостью принято.
Мой класс:
class Tester {
public:
int varA;
int varB;
Tester() {
varA = 1;
varB = 1;
}
Tester(Tester& P1, Tester& P2) {
varA = P1.varA + P2.varA;
varB = P1.varB + P2.varB;
}
Tester(const Tester &Source) {
varA = Source.varA;
varB = Source.varB;
}
};
Моя тестовая сеть:
Не работает:
int main() {
std::vector < Tester > BreakIt;
for (int i = 0; i < 2500; i++) {
Tester newTester;
BreakIt.push_back(newTester);
Tester& tempTester = BreakIt.at(0);
for (int j = 0; j < 4; j++) {
BreakIt.push_back(Tester(newTester, tempTester)); //This is where it crashes.
}
}
return 0;
}
Работает:
int main() {
std::vector < Tester > BreakIt;
Tester newTester;
BreakIt.push_back(newTester);
for (int i = 0; i < 2500; i++) {
Tester& tempTester = BreakIt.at(0);
for (int j = 0; j < 4; j++) {
BreakIt.push_back(Tester(newTester, tempTester));
}
}
return 0;
}
Работает:
int main() {
std::vector < Tester > BreakIt;
for (int i = 0; i < 2500; i++) {
Tester newTester;
BreakIt.push_back(newTester);
Tester& tempTester = BreakIt.at(0);
}
return 0;
}
Разрыв строки push_back()
запустить несколько раз до аварии.Кажется, что когда я изменяю некоторые вещи вокруг и перекомпилирую, меняется точка, в которой происходит сбой (т.е. 20 раз в основном цикле против 175 раз против 1000 раз).Однако, после того как я скомпилирован, он обычно проходит одну и ту же итерацию каждый раз перед сбоем.
Я подозреваю, что это какое-то «неопределенное поведение», но откуда я не уверен.
Может кто-нибудь помочь мне определить, почему BreakIt.push_back(Tester(newTester, tempTester));
не работает там, где я хочу?