繁体   English   中英

C ++ std :: vector孤立范围错误

[英]c++ std::vector Orphan Range error

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

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);

STL中编译器指向的“错误源”:

http://i51.tinypic.com/2dt0t9e.jpg


错误信息:

graph.exe中0x001a543b处未处理的异常:0xC0000005:访问冲突读取位置0xfdfdfe01。


用于填充邻接表的fillList函数:

void fillList(int vertexNumber, vector<int> *List){
    int input=0;
    for (int i=0;i<vertexNumber;i++){   
        int in=i;
        cout<<"Introduce adjacent vertexes for the vertex -"<<i+1<<"-:"<<endl;
        for(int j=0;j<vertexNumber;j++){
            std::cout<<i+1<<"-";
            std::cin>>input;
            if(input==0) break;
            List[i].push_back(input-1);
        }
    }
}

任何线索都欢迎。


一个问题是您尚未初始化adjacencyList。 根据此代码,当它进入listToAdMatrix时,它应该指向垃圾(或为null)。 当尝试索引到List [in]时,该错误会导致错误。

您确定adjacencyList[in].size()总是小于顶点吗? 将代码放在j循环之前进行检查。 现在,您只需要放置一条虚拟线和一个断点,看看是否可能发生。

如果是这样,则adjacencyList初始化不正确,或者这是您需要处理的情况。

您还需要确保将adjacencyList设置为一个长度为vertex的数组,但这更加明显,因此您可能正在这样做。

问题解决了 :

我再次读取了数组之外的错误,这是我用来处理Matrix(动态数组)中的向量的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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM