c ++中的访问冲突

时间:2014-12-15 22:34:08

标签: c++

初学者程序员在这里。我在有向图程序中遇到了访问冲突错误,我想知道是否有人可以告诉我原因。

这是故障代码(不用担心,它并不多)。这段代码来自我的主要功能。我刚刚从文件中读取了一些信息,解析了它,并尝试使用名为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”。这可能是一个愚蠢的问题,但任何人都可以帮助我吗?

1 个答案:

答案 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中阅读。