嗨,我刚刚开始学习c ++并带有奇怪的行为。
这是代码
#include <iostream>
#include <vector>
#include <algorithm>
long long MaxPairwiseProduct(const std::vector<long long>& numbers) {
int n = numbers.size();
int fidx, sidx = 0;
for (int i = 1; i < n; ++i) {
if (numbers[i] > numbers[sidx]) {
fidx = sidx;
sidx = i;
} else if (numbers[i] > numbers[fidx]) {
fidx = i;
}
}
return numbers[fidx] * numbers[sidx];
}
int main() {
int n;
std::cin >> n;
std::vector<long long> numbers(n);
for (int i = 0; i < n; ++i) {
std::cin >> numbers[i];
}
std::cout << MaxPairwiseProduct(numbers) << "\n";
return 0;
}
我用
g++ -pipe -O2 -std=c++11 max_pairwise_product.cpp
然后输入以下内容:
2
100000 90000
并抛出Segmentation fault (core dumped)
但是当我在计算maxPairwiseProduc的结果之前添加std::cout << sidx << fidx << std::endl;
时,它会编译并按预期工作,从而提供正确的结果。
实际上,即使我只放std::cout << "";
那么这里发生了什么?以及如何调试此类情况以了解发生了什么?
答案 0 :(得分:2)
int fidx, sidx = 0;
fidx
尚未初始化,会导致未定义的行为,因此它有时可能需要工作,有时则可能不需要
int fidx = 0;
int sidx = 0;
这是一篇使用c ++ link
初始化变量的方法不同的文章