這是我的代碼:我的C++程序可以運行,但總是彈出錯誤
GraphBuilder.h
//#pragma once
#include<iostream>
#include<stdio.h>
#include<fstream>
#include <stdlib.h>
#include <string>
using namespace std;
#define MaxVertexNum 500000
struct Node{
int data;
struct Edge *next;
};
struct Edge{
int data;
int weight;
struct Edge* next;
};
class GraphBuilder
{
public:
GraphBuilder();
void CreateGraph();
void printGraph();
Node *header;
int total_of_nodes, total_of_edges;
private:
};
GraphBuilder.cpp
#include"GraphBuilder.h"
using namespace std;
GraphBuilder::GraphBuilder()
{
}
void GraphBuilder::CreateGraph()
{
int i,j,k;
int vex1, vex2, weight;
char a;
Edge *tmp, *newNode;
FILE *fp;
int line= -1;
fp = fopen("Text1.txt", "r");
if(fp == NULL)
{
cout<<"Cannot open file!\n";
return;
}
while(!feof(fp))
{
if(line == -1)
{
fscanf(fp, "%d %d", &total_of_nodes, &total_of_edges);
line++;
}
else break;
}
for(i=0;i<total_of_nodes;i++)
{
header[i].data = i;
header[i].next = NULL;
}
while(!feof(fp))
{
if(line == -1)
{
fscanf(fp, "%d %d", &total_of_nodes, &total_of_edges);
line++;
}
else
{
fscanf(fp, "%d %d %d", &vex1, &vex2, &weight);
newNode = (Edge *)malloc(sizeof(Edge));
newNode->data = vex2;
newNode->weight = weight;
newNode->next = NULL;
if (header[vex1].next == NULL)
header[vex1].next = newNode;
else
{
tmp = header[vex1].next;
header[vex1].next = newNode;
newNode->next = tmp;
}
}
}
}
void GraphBuilder::printGraph()
{
int i;
Edge* tmp;
for (i=0; i<total_of_nodes; i++)
{
cout<<header[i].data;
if (header[i].next != NULL)
{
tmp = header[i].next;
cout<<"->"<<tmp->data;
while (tmp->next != NULL)
{
cout<<"->"<<tmp->data;
}
}
cout<<endl;
}
}
的main.cpp
#include"GraphBuilder.h"
using namespace std;
void main()
{
GraphBuilder gb;
gb.CreateGraph();
gb.printGraph();
}
我在VS2012上運行代碼,它alwa ys彈出發生訪問衝突的錯誤。我不知道爲什麼會出現這個錯誤,我是一名C++新生。請告訴我如何更正我的代碼。 感謝您的幫助。
您是否試過通過調試器運行它以準確找到違規發生的位置? – Sinkingpoint
創建一個析構函數,該函數關閉文件並釋放動態分配的內存。 – KBart
您正在寫入'const int'變量。這是未定義的行爲。 –