在运行时对向量执行C ++断言失败表达式:向量下标超出范围
||
即时消息这真烦人的错误消息。我知道我对此并不陌生,但似乎可以弄清楚。谁能告诉我我哪里出问题了?
运行时的消息是:
调试断言失败!
程序:
....
文件:c:\\ program files \\ Microsoft Visual Studio 10.0 \\ vc \\ include \\ vector
线:932
表达式:向量下标超出范围
和代码是
#include \"VectorIntStorage.h\"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void VectorIntStorage::Read(istream& r)
{
char c[13];
r >> c;
r >> NumberOfInts; //gets number of ints for vector
//numberVector = new std::vector<int> numberVector;
for(int i = 0; i < NumberOfInts; i++)
{
r >> numberVector[i];
cout << numberVector[i] << endl;
if(_sortRead) //true
{
for(int k = 0; k < i; k++)
{
if(numberVector[i] < numberVector[k])
{
int temp = numberVector[k];
numberVector[k] = numberVector[i];
numberVector[i] = temp;
}
}
}
}
}
void VectorIntStorage::Write(ostream& w)
{
for(int i = 0; i < NumberOfInts; i++)
{
w << numberVector[i] << endl;
cout << numberVector[i] << endl;
}
}
void VectorIntStorage::sortStd()
{
sort(numberVector.begin(), numberVector.end());
}
void VectorIntStorage::sortOwn()
{
quickSort(0, NumberOfInts - 1);
}
void VectorIntStorage::setReadSort(bool sort)
{
_sortRead = sort;
}
void VectorIntStorage::quickSort(int left, int right)
{
int i = left, j = right;
int tmp;
int pivot = numberVector[(left + right) / 2];
while (i <= j)
{
while (numberVector[i] < pivot)
i++;
while (numberVector[j] > pivot)
j--;
if (i <= j)
{
tmp = numberVector[i];
numberVector[i] = numberVector[j];
numberVector[j] = tmp;
i++;
j--;
}
}
if (left < j)
{
quickSort(left, j);
}
if (i < right)
{
quickSort(i, right);
}
}
VectorIntStorage::VectorIntStorage(const VectorIntStorage& copying)
{
//int *duplicate = new int[(copying.NumberOfInts)];
//vector<int> *duplicate = new vector<int>;
//std::copy(numberVector.begin(), numberVector.end(), duplicate);
//numberVector = duplicate;
//NumberOfInts = copying.NumberOfInts;
}
VectorIntStorage::VectorIntStorage(void)
{
}
VectorIntStorage::~VectorIntStorage(void)
{
}
没有找到相关结果
已邀请:
3 个回复
犀寺扦
。我想你想说
问题恰恰是错误消息说的是:您的向量下标(
)超出范围。具体来说,您永远不会增加向量的大小,因此向量的大小始终为0。因此,对
的任何使用都将引用超出范围的元素。
膛嵌墒缅欠
就使用
。
授巨
从以上评论看来,您需要一个大小为
的向量。但是,请保留注释行-
您将向量声明为-
要在
上执行
的操作,在声明时应提及其大小,并且大小应在有效范围内。由于声明时未提及,因此您需要执行
操作来动态增加向量的大小。