【发布时间】:2013-12-28 09:55:16
【问题描述】:
我正在编写一个程序,该程序将用户输入整数到一个数组中,调用一个从该数组中删除重复项的函数,然后打印出修改后的数组。当我运行它时,它允许我将值输入到数组中,但是当我完成输入值时会给我一个“分段错误”错误消息。我做错了什么?
这是我的代码:
#include <iostream>
using namespace std;
void rmDup(int array[], int& size)
{
for (int i = 0; i < size; i++)
{
for (int j = i + 1; j < size; j++)
{
if (array[i] == array[j])
{
array[i - 1 ] = array[i];
size--;
}
}
}
}
int main()
{
const int CAPACITY = 100;
int values[CAPACITY], currentSize = 0, input;
cout << "Please enter a series of up to 100 integers. Press 'q' to quit. ";
while (cin >> input)
{
if (currentSize < CAPACITY)
{
values[currentSize] = input;
currentSize++;
}
}
rmDup(values, currentSize);
for (int k = 0; k < currentSize; k++)
{
cout << values[k];
}
return 0;
}
谢谢。
【问题讨论】:
-
对于c++ 考虑使用
std::vector<int>而不是int array[] -
为什么不使用标准库?
using namespace std; sort(begin(values), end(values)); size = unique(begin(values), end(values)) - begin(values); -
我不知道这些命令(排序、结束、唯一),但我一定会熟悉它们。
-
考虑边界线情况(处理数组时的一般技术)。当 i = size - 1 时, j 将变为 size 。它意味着 array[j] 将是 array[size] 。这意味着崩溃:)
标签: c++ arrays function segmentation-fault