2013-02-04 33 views
0
vector<char*> *v =new vector<char*>[size]; 
for(i=0;i<size;i++) 
{ 
    char *buf=new char[1024]; 
    ------ 
    ------ 
    ind=****; 
    v[ind].push_back(buf); // i am sure ind is not our of bounds. 
} 

我使用new運算符聲明瞭一個矢量數組,並將其填充到一個循環中。但遇到了SEGV。我無法弄清楚它是如何發生的。我的GDB回溯爲我提供了最後一個堆棧函數「..... include/C++/4.4.5/ext/new_allocator.h:105」。下面描述了 代碼片段。使用回推的SEGV

+1

很好地工作,任你省略實際上導致代碼的一部分段錯誤,或索引實際上超出界限。順便說一下,使用一個普通的'vector'數組幾乎總是沒用,也是一個糟糕的主意,用'vector '代替。 – us2012

+1

請提供完整的堆棧跟蹤,並考慮使用「vector」或「vector」來代替。 – trojanfoe

回答

2

我有一種感覺,你真正想要

auto vv = vector<vector<string>>(size/*, vector<string>(1024)*/); 

然後與

for(auto v& : vv) 
{ 
    v.push_back("ola"); 
} 

+0

@MatsP ninjaed真快!無論如何 – sehe