2017-09-04 45 views
-1
的矢量

結構名次包含開始和結束 substringPos載體包含矢量之一名次 陣列矢量的名次包含substringPos 尺寸數組是通過排列號碼遞增儲備呼叫 數組的第一元素substringPos通過交換呼叫段錯誤,分配內存以指向矢量

struct Pos 
    { 
    int start; 
    int end; 
    }; 

    typedef vector<Pos*> PosVector; 
    vector<struct Pos*>substringPos; 
    struct Pos*temp=new Pos; 
    temp->start=3; 
    temp->end=10; 
    substringPos.push_back(temp); 



    vector<PosVector*> array; 
    array.push_back(&substringPos); 
    array.reserve(permutations);  
    for(int v=1;v<permutations-1;v++) 
    { 
     array[v]->push_back(temp);//gives segmentation fault 
     array[v]->swap(*array[0]);//gives segmentation fault 

    } 
+1

這不可能是真正的代碼。它在聲明之前使用'substringPos'。 –

+2

'數組'只包含一個元素;唯一有效的索引是'array [0]'。由於'i'和'permutations'從不顯示,所以很難確定,但是'i + v'大於'0'的可能性很大,並且您的程序通過訪問索引超出範圍來展示未定義的行爲。 –

+0

這是* prime *用於運行調試器。 – WhozCraig

回答

0
vector<PosVector*> array; 
array.push_back(&substringPos); 
array.reserve(permutations);  
for(int v=1;v<permutations-1;v++) 
{ 
    array[v]->push_back(temp);//gives segmentation fault 
    array[v]->swap(*array[0]);//gives segmentation fault 
} 

此代碼表現出不確定的行爲複製到陣列的其它元件。假設permutations變量初始化並且大於1.當您調用array.reserve時,您將分配array向量中的內存以存儲permutations元素的數量。每個元素都是指向PosVector的指針。由於你從不初始化它們,因此嘗試解析未初始化的指針會導致未定義的行爲,並且在你的情況下會出現段錯誤。也許最好是存儲矢量本身,而不是指針?

0

這錯誤是由於矢量標超出range.Vector或陣列的應在索引0 開始的for循環,請改變如下

for(int v=0;v<permutations-1;v++) 
{ 
    // your code 
}