qq_36323751 2017-04-12 13:24 采纳率: 0%
浏览 1067

C++:非法访问是怎么回事

#include
#include
using namespace std;
#define MAX 100
#define inf 10000
int A[MAX][MAX],visited[MAX],g[MAX];
typedef int elem_t;
typedef struct HeapStruct *Minheap;
struct HeapStruct{
elem_t H[MAX];//存储堆元素的数组
elem_t ph[MAX];
int size;//堆当前的元素个数
};

void Bubbleup(HeapStruct Heap,int n)
{
while(n>1)
{
if(Heap.H[n]<Heap.H [n/2])
{
int tmp=Heap.H [n];
Heap.H[n]=Heap.H[n/2];
Heap.H[n/2]=tmp;
n=n/2;
}
else
break;
}

}

int ExtractMin(HeapStruct Heap)
{
int M=Heap.H[1];
int pa,child,temp1;
temp1=Heap.H[Heap.size];
Heap.size--;
//Heap.H[Heap.size]=0;
for(pa=1;pa*2 <=Heap.size ;pa=child)//向下冒泡
{
child=2*pa;
if(Heap.H[child] > Heap.H[child+1]&&Heap.size>=child+1)
child++;
if(temp1 > Heap.H[child])
Heap.H[pa] = Heap.H[child];
else
break;
}
Heap.H[pa]=temp1;
visited[g[M]]=1;//这里出的问题
return M;
}

void Heapinsert(HeapStruct Heap,int n)
{
Heap.H[++Heap.size]= n;
Bubbleup(Heap,Heap.size);
}

void prim(int m,int n,int A[MAX][MAX],int p[],HeapStruct Heap)
{
p[m]=0;
int temp=m;
visited[m]=1;
for(int k=1;k<=n;k++)//生成堆
{
if(A[m][k]!=0)
{
p[k]=m;
g[A[m][k]]=k;
Heapinsert(Heap,A[m][k]);
Heap.ph[k]=Heap.size;
}
}
m=g[ExtractMin(Heap)];
while(Heap.size!=0)
{
visited[m]=1;
for(int i=1;i<=n;i++)
{
if(A[m][i]<Heap.H[Heap.ph[i]]&&A[m][i]!=0&&visited[i]!=1)
{
p[i]=m;
g[A[m][i]]=i;
Heap.H[Heap.ph[i]]=A[m][i];
Bubbleup(Heap,Heap.ph[i]);
}
}
m=g[ExtractMin(Heap)];

}
for(int j=1;j<=n;j++)
if(j!=temp)
cout<

"<<j<<endl;

}

First-chance exception in project2.exe: 0xC0000005: Access Violation.

  • 写回答

3条回答

  • threenewbee 2017-04-12 15:37
    关注

    不要直接运用,而是调试运行你的程序,出错了停在那行,检查那行的指针,要么越界,要么没有初始化

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮