C++ C++;运行时对向量表达式的断言失败:向量下标超出范围
我收到了这个非常恼人的错误信息。我知道我只是个新手,但这似乎是我能弄明白的事情。谁能告诉我哪里出了问题吗 运行时的消息是: 调试断言失败! 节目: .... 文件:c:\program files\microsoft visual studio 10.0\vc\include\vector 电话号码:932 表达式:向量下标超出范围 代码是C++ C++;运行时对向量表达式的断言失败:向量下标超出范围,c++,vector,assertion,C++,Vector,Assertion,我收到了这个非常恼人的错误信息。我知道我只是个新手,但这似乎是我能弄明白的事情。谁能告诉我哪里出了问题吗 运行时的消息是: 调试断言失败! 节目: .... 文件:c:\program files\microsoft visual studio 10.0\vc\include\vector 电话号码:932 表达式:向量下标超出范围 代码是 #include "VectorIntStorage.h" #include <iostream> #include <fstream&g
#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)
{
}
#包括“VectorIntStorage.h”
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
无效矢量存储::读取(istream&r)
{
charc[13];
r>>c;
r>>NumberOfInts;//获取向量的int数
//numberVector=新标准::向量numberVector;
for(int i=0;i>数字向量[i];
我们没有足够的信息可以确定,但我怀疑失败的一行是numberVector[I]
。我想你的意思是说int j;r>>j;numberVector.push_back(j);
问题正是错误消息所说的:您的向量下标(
i
)超出范围。具体来说,您从未增加向量的大小,因此它的大小始终为0。因此,任何使用运算符[]
将引用一个超出范围的元素。我们没有足够的信息来确定,但我怀疑失败的一行是r>>numberVector[I]
。我想你是说int j;r>>j;numberVector.push_back(j);
问题正是错误消息所说的:你的向量下标(
i
)超出范围。具体来说,你从不增加向量的大小,因此它总是大小为0。因此,任何使用运算符[]
的操作都会引用超出范围的元素。你不能只使用numberVector[i]
而不首先调用numberVector.resize()
vector<int> vec;
vec[1] = 0; // fails - vec is empty so [1] is out of range
vec.resize(100);
vec[1] = 5; // ok, you can access vec[0] .. vec[99] now
vec.push_back(11); // Now the size is 101 elements, you can access vec[0] .. vec[100]
vec;
vec[1]=0;//失败-vec为空,因此[1]超出范围
向量调整(100);
vec[1]=5;//好的,您现在可以访问vec[0]…vec[99]
vec.push_back(11);//现在大小为101个元素,您可以访问vec[0]…vec[100]
如果不先调用numberVector.resize()
就不能使用numberVector[i]
vector<int> vec;
vec[1] = 0; // fails - vec is empty so [1] is out of range
vec.resize(100);
vec[1] = 5; // ok, you can access vec[0] .. vec[99] now
vec.push_back(11); // Now the size is 101 elements, you can access vec[0] .. vec[100]
vec;
vec[1]=0;//失败-vec为空,因此[1]超出范围
向量调整(100);
vec[1]=5;//好的,您现在可以访问vec[0]…vec[99]
vec.push_back(11);//现在大小为101个元素,您可以访问vec[0]…vec[100]
从上面的注释来看,您似乎需要一个大小为NumberOfInts
的向量,但将行保留为注释行-
//numberVector = new std::vector<int> numberVector;
从上面的注释来看,您似乎需要一个大小为NumberOfInts
的向量,但将行保留为注释行-
//numberVector = new std::vector<int> numberVector;
我们没有行号,所以指示哪一行是有用的没有行号,这是一个运行时错误,对不起,应该提到that@Tanya-调用哪个方法导致断言失败?我希望我知道,这就是为什么我给你整个cpp代码,因为当我尝试运行它时,会出现一个错误消息框。你应该y使用调试器查找触发断言的方法调用。顺便问一下,numberVector是如何初始化的?是否足够长,可以在VectorStorage::Read(..)中使用下标运算符?我们没有行号,因此指示哪一行是有用的。没有行号,这是一个运行时错误,对不起,应该提到that@Tanya-调用哪个方法导致断言失败?我希望我知道,这就是为什么我给了你整个cpp代码,因为当我尝试运行它时会出现一个错误消息框。你不应该请尝试使用调试器查找触发断言的方法调用。numberVector是如何初始化的,顺便问一下?在VectorStorage::Read(..)中使用下标运算符是否足够长?除此原因外,发生内存泄漏时是否会显示此错误?除此原因外,发生内存泄漏时是否会显示此错误?
for(int i = 0; i < NumberOfInts; i++)
{
r >> numberVector[i]; // Size isnot initially mentioned while declaration
// of the vector to do an `[]` operation
cout << numberVector[i] << endl;
// ....