簡體   English   中英

C ++中的訪問沖突

[英]Access violation in 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”。 這可能是一個愚蠢的問題,但是有人可以幫助我嗎?

您定義了一個由1000個InifitalInfo指針組成的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的推薦,您必須使用智能指針而不是新的運算符。 您可以在此鏈接中閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM