【发布时间】:2018-12-16 09:51:39
【问题描述】:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int MaxPairwiseProduct(vector<int>& numbers);
//declaration
vector<int> *x;
x->push_back(1);
x->push_back(2);
int answer = MaxPairwiseProduct(*x);
cout << answer;
}
int MaxPairwiseProduct(vector<int>& numbers) {
int index1 = 1;
int index2;
//vector<int> numbers = number;
int n = numbers.size();
for(int i = 2;i < n;++i){
if(numbers[i]>numbers[index1]){
index1 = i;
}
}
if(index1 == 1){
index2 = 2;
} else {
index2 = 1;
}
for(int i = 1;i < n;++i){
if(numbers[i] != numbers[index1] && numbers[i]>numbers[index2]){
index2 = i;
}
}
numbers[index1] * numbers[index2];
return numbers[index1] * numbers[index2];
}
我正在尝试实现一个看似先进的算法来找到最大对明智的产品。我继续收到分段错误(核心转储)错误,我知道这可能与我的指针和函数范围有关。有什么建议或提示吗?
【问题讨论】:
-
vector<int> *x;你的向量指针永远不会被初始化为一个有效的实例。你为什么要在那里使用指针? -
公元前我可以我猜大声笑,想确保我记得 C++ 中的内存管理。如何将其初始化为有效实例?
-
最好的方法是根本不使用指针:
vector<int> x;并用.替换取消引用的->箭头,当你将它传递给另一个时也省略*功能。 -
我也这样做了,现在得到 0 作为错误的答案。
-
这可能是另一个问题。我建议您在调试器中运行代码并逐行执行。
标签: c++ algorithm pointers memory vector