初学者程序员在这里。我在有向图程序中遇到了访问冲突错误,我想知道是否有人可以告诉我原因。
这是故障代码(不用担心,它并不多)。这段代码来自我的主要功能。我刚刚从文件中读取了一些信息,解析了它,并尝试使用名为InitialInsert的函数将其插入到存储桶中。
//Store parsed file values
sourceCity = line[0];
destinationCity = line[1];
miles = stoi(line[2]);
cost = stoi(line[3]);
//Insert parsed values into Info bucket
graph.InitialInsert(sourceCity, destinationCity, miles, cost, size++); //Size is initialized to 0
这是初始插入功能。
//InitialInsert function
void Graph::InitialInsert(string source, string destination, int distance, int price, int index)
{
InfoBuckets[index]->sourceCity = source;
InfoBuckets[index]->destinationCity = destination;
InfoBuckets[index]->miles = distance;
InfoBuckets[index]->cost = price;
}
这是来自我的头文件。
static int const ARRAY_SIZE = 1000;
struct InitialInfo
{
string sourceCity;
string destinationCity;
int miles;
int cost;
};
InitialInfo* InfoBuckets[ARRAY_SIZE];
当我点击InitialInsert函数的第一行时,我收到错误“访问冲突读取位置0xCCCCCCE4”。这可能是一个愚蠢的问题,但任何人都可以帮助我吗?
答案 0 :(得分:1)
你被定义为InifitalInfo的1000个指针的ARRAY,但是InitialInfo [0]从未被初始化。
试试这个:
对象数组
InitialInfo InfoBuckets[ARRAY_SIZE];
...
void Graph::InitialInsert(string source, string destination, int distance, int price, int index)
{
InfoBuckets[index].sourceCity = source;
InfoBuckets[index].destinationCity = destination;
InfoBuckets[index].miles = distance;
InfoBuckets[index].cost = price;
}
或
指针数组
InitialInfo *InfoBuckets[ARRAY_SIZE];
...
InfoBuckets[0] = new InitialInfo(); // You need create the object first before using
...
void Graph::InitialInsert(string source, string destination, int distance, int price, int index)
{
InfoBuckets[index]->sourceCity = source;
InfoBuckets[index]->destinationCity = destination;
InfoBuckets[index]->miles = distance;
InfoBuckets[index]->cost = price;
}
正如@Roddy所建议的那样,你必须使用智能指针而不是新的运算符。您可以在此link中阅读。