C++ c++;std::矢量孤立范围错误

C++ c++;std::矢量孤立范围错误,c++,stl,vector,dynamic-memory-allocation,C++,Stl,Vector,Dynamic Memory Allocation,一种处理图(从图论)表示和变换的程序。邻接表和矩阵的实现类似于向量的动态数组(不要问为什么不向量的向量),因为以下函数程序存在内存错误,编译器指向孤立向量定义 int vertex,edges; vector<int> *adjacencyList,*adjacencyMatrix; void listToAdMatrix(int vertexNumber, vector<int> *List, vector<int> *Matrix){ int in=0

一种处理图(从图论)表示和变换的程序。邻接表和矩阵的实现类似于向量的动态数组(不要问为什么不向量的向量),因为以下函数程序存在内存错误,编译器指向孤立向量定义

int vertex,edges;
vector<int> *adjacencyList,*adjacencyMatrix;

void listToAdMatrix(int vertexNumber, vector<int> *List, vector<int> *Matrix){
 int in=0,cont=0;
 for(int i=0;i<vertexNumber;i++){
  in=i;
  for(auto j=List[in].begin();j!=List[in].end();j++){
   for(int k=0;k<vertexNumber;++k){
    if(k==*j) Matrix[cont].push_back(1); 
    else Matrix[cont].push_back(0);
   }
   cont++;
  }
 }
}

//function call
//vertex(number) and ajacencyList are initialized

adjacencyMatrix=new vector<int>[vertex];
listToAdMatrix(vertex,adjacencyList,adjacencyMatrix);
int顶点、边;
向量*邻接矩阵,*邻接矩阵;
无效列表到数据矩阵(整数顶点编号、向量*列表、向量*矩阵){
int in=0,cont=0;

对于(int i=0;i一个问题是您还没有初始化adjacencyList。根据这段代码,当它进入ListToAndMatrix时,它应该指向垃圾(或null)。这将在尝试索引到列表[in]时导致错误。

您确定
adjacencyList[in].size()吗
始终小于顶点?将代码放在
j
循环之前以检查是否存在此问题。现在,您只需要放置一条虚线和一个断点,以查看是否可能发生此情况

如果是这样,那么要么是邻接列表初始化错误,要么就是您需要处理这种情况


您还需要确保将adjacencyList设置为长度
顶点的数组,但这更明显,所以您可能正在这样做。

问题已解决:

我再次读取了数组外部。错误出现在cont变量中,我使用该变量来处理矩阵(动态数组)中的向量,当向量到达数组外部时将其递增。问题通过插入while语句得到解决。谢谢大家的回答

int vertex,edges;
vector<int> *adjacencyList,*adjacencyMatrix;

void listToAdMatrix(int vertexNumber, vector<int> *List, vector<int> *Matrix){
 int in=0,cont=0;
 for(int i=0;i<vertexNumber;i++){
  in=i;
  for(auto j=List[in].begin();j!=List[in].end();j++){
   while(cont!=vertexNumber){
     for(int k=0;k<vertexNumber;++k){
       if(k==*j) Matrix[cont].push_back(1); 
       else Matrix[cont].push_back(0);
     }
     cont++;
   }
  }
 }
}

//function call
//vertex(number) and ajacencyList are initialized

adjacencyMatrix=new vector<int>[vertex];
listToAdMatrix(vertex,adjacencyList,adjacencyMatrix);
int顶点、边;
向量*邻接矩阵,*邻接矩阵;
无效列表到数据矩阵(整数顶点编号、向量*列表、向量*矩阵){
int in=0,cont=0;

对于(int i=0;i请发布编译器的错误消息或运行时错误,而不是调试器屏幕截图。我们需要查看更多代码。当我编译并运行此命令时(将vertex初始化为10,并将adjacencyList初始化为相同大小的数组),没有错误。@Space\u c0w0y我不允许发布超过2个链接。但是,这是第二个屏幕@ilcreade:不要发布图片链接。使用“复制/粘贴”将实际文本发布到此处。此网站旨在帮助您和其他可能有相同问题的人。您的图片链接可能有一天会死掉,使问题变得无用。A此外,图像使基于文本的搜索无效。请发布您得到的实际错误。否,我有一个函数读取邻接列表(在此之前,我声明了列表)。问题在于转换。我检查并通过了。邻接列表已正确初始化(我有一个用于打印的函数)。
int vertex,edges;
vector<int> *adjacencyList,*adjacencyMatrix;

void listToAdMatrix(int vertexNumber, vector<int> *List, vector<int> *Matrix){
 int in=0,cont=0;
 for(int i=0;i<vertexNumber;i++){
  in=i;
  for(auto j=List[in].begin();j!=List[in].end();j++){
   while(cont!=vertexNumber){
     for(int k=0;k<vertexNumber;++k){
       if(k==*j) Matrix[cont].push_back(1); 
       else Matrix[cont].push_back(0);
     }
     cont++;
   }
  }
 }
}

//function call
//vertex(number) and ajacencyList are initialized

adjacencyMatrix=new vector<int>[vertex];
listToAdMatrix(vertex,adjacencyList,adjacencyMatrix);