【发布时间】:2011-04-28 13:45:53
【问题描述】:
一个处理图(来自图论)表示和转换的程序。邻接表和矩阵的实现就像向量的动态数组(不要问为什么不是向量的向量),因为以下函数程序退出时出现内存错误和指向孤立向量定义的编译器。
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);
}
}
}
欢迎提供任何线索。
【问题讨论】:
-
请发布编译器错误信息或运行时错误,而不是调试器屏幕截图。
-
我们需要查看更多您的代码。当我编译并运行它时(初始化顶点为10,并将adjacencyList初始化为相同大小的数组),没有错误。
-
@Space_C0wb0y 我不允许发布超过 2 个链接。但是这里是第二个屏幕 i52.tinypic.com/2u5ri3l.jpg>
-
@ilcreade:不要发布图片链接。使用复制/粘贴在此处发布实际文本。该网站旨在帮助您和其他可能遇到相同问题的人一样多。您的图片链接可能有一天会失效,从而使问题变得毫无用处。此外,图像使基于文本的搜索变得毫无用处。
-
请发布您遇到的实际错误。
标签: c++ stl vector dynamic-memory-allocation