引发的异常: 0xC0000005: 写入位置 0xCCCCCCD4 时发生访问冲突。

菜鸟sunny 2016-12-08 12:31:52



请问这是什么原因呀,菜鸟一个,求助呀!
...全文
2204 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜鸟sunny 2016-12-08
  • 打赏
  • 举报
回复
问题出在标黄的地方。这是一个用图搜索解决迷宫问题的程序。但是我确实不太清楚是哪里写错了。如果方便的话,麻烦你们帮我看一下吧
菜鸟sunny 2016-12-08
  • 打赏
  • 举报
回复
#include<stdio.h> #include<stdlib.h> #define M 10 #define N 10 typedef struct Anode { int i, j; struct Anode*nextarc; }ArcNode; typedef struct Vnode { ArcNode*firstarc; }Vnode; typedef struct { Vnode adjlist[M + 2][N + 2]; }ALGraph; typedef struct { int row; int col; }Path; int mg[M+2][N+2]= { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,0,0,0,1,0,1}, {1,0,0,1,0,0,0,1,0,1}, {1,0,0,0,0,1,1,0,0,1}, {1,0,1,1,1,0,0,0,0,1}, {1,0,0,0,1,0,0,0,0,1}, {1,0,1,0,0,0,1,0,0,1}, {1,0,1,1,1,0,1,1,0,1}, {1,1,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1} }; void CreatList(ALGraph *&G) { int i,j; ArcNode*p; G = (ALGraph*)malloc(sizeof(ALGraph)); for (i = 0; i < M; i++) for (j = 0; j < N; j++) { if(mg[j][j]!=0) G->adjlist[i][j].firstarc = NULL; }; for (i = 0; i < M; i++) for (j = 0; j < N; j++) { if (mg[i - 1][j] != 0) { p = (ArcNode*)malloc(sizeof(ArcNode)); p->i = i-1; p->j = j; p->nextarc = G->adjlist[i][j].firstarc; G->adjlist[i][j].firstarc = p; } if (mg[i][j+1] != 0) { p = (ArcNode*)malloc(sizeof(ArcNode)); p->i = i ; p->j = j+1; p->nextarc = G->adjlist[i][j].firstarc; G->adjlist[i][j].firstarc = p; } if (mg[i+1][j ] != 0) { p = (ArcNode*)malloc(sizeof(ArcNode)); p->i = i+1; p->j = j ; p->nextarc = G->adjlist[i][j].firstarc; G->adjlist[i][j].firstarc = p; } if (mg[i][j-1] != 0) { p = (ArcNode*)malloc(sizeof(ArcNode)); p->i = i; p->j = j -1; p->nextarc = G->adjlist[i][j].firstarc; G->adjlist[i][j].firstarc = p; } } } void FindaPath(ALGraph*G, int i, int j,int u,int v,Path path[M*N],int d) { int k,m,n; ArcNode*p; int visited[M][N]; visited[i][j] = 1; d++; path[d].row = i; path[d].col= j; if (i == u&&j == v&&d>=1) { printf("一条路径为:"); for (k = 0; k <= d; k++) printf("(%d,%d)", path[d].row, path[d].col); printf("\n"); return; } p=G->adjlist[i][j].firstarc; while (p!= NULL) { m = p->i; n = p->j; if (visited[m][n] == 0) FindaPath(G, m, n, u, v, path, d); p = p->nextarc; } visited[i][j] = 0; } int main() { ALGraph *G; int i=1, j=1; int u = 8, v = 8; int d = 0; Path*path[M*N]; CreatList(G); FindaPath(G, i, j, u, v, path[M*N], d); system("PAUSE"); return 0; }
paschen 版主 2016-12-08
  • 打赏
  • 举报
回复
点最左边的中断,中断后通过调用堆栈定位到你相关的代码,然后观察分析原因
小灸舞 2016-12-08
  • 打赏
  • 举报
回复
Path *path[M*N];应该是Path path[M*N];
FindaPath(G, i, j, u, v, path[M*N], d);应该是FindaPath(G, i, j, u, v, path, d);
PS:这个错误改了以后你还有别的错误,自己单步调试改。注意初始化和下标的使用
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

int main()
{
ALGraph *G;
int i = 1, j = 1;
int u = 8, v = 8;
int d = 0;
Path path[M*N];
CreatList(G);
FindaPath(G, i, j, u, v, path, d);

system("PAUSE");
return 0;
}
luciferisnotsatan 2016-12-08
  • 打赏
  • 举报
回复
访问违规。如果是在标黄处报的错,那看看下标d是不是已经超出path数组的范围了

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧