2016-10-31 25 views
0

我想用動態數組編寫我的第一個真正的程序,但我遇到了一個我無法理解的問題。基本上,我正在嘗試使用動態數組,將其複製到臨時數組中,然後再向原始數組中添加一個地址,然後將所有內容都複製回原始數組。現在原來的數組有比以前多一個地址。這在嘗試使用整數時非常有效,但字符串會使我的程序崩潰。下面是我與掙扎的代碼示例:分配一個新的字符串崩潰?

void main() 
{ 
int x = 3; 
std::string *q; 
q = new std::string[x]; 

q[0] = "1"; 
q[1] = "2"; 
q[2] = "3"; 

    x++; 
    std::string *temp = q; 
    q = new std::string[x]; 
    q = temp; 
    q[x-1] = "4"; 

    for (int i = 0; i < 5; i++) 
    std::cout << q[i] << std::endl; 
} 

如果我是做q和溫度爲指針爲int,而不是字符串,那麼程序運行得很好。任何幫助將不勝感激,我一直堅持這一個小時或兩個小時。

+0

比較'Q =新的std :: string [X]'和'Q =溫度;'...的'='號意味着在這兩種情況下 –

回答

1

q = temp只執行淺拷貝。你失去了原來的q及其指向的所有字符串。

自從你重新分配q有4個元素,但然後立即重新分配temp(其用僅3個元素分配),訪問(和分配)在x元件現在是陣列的邊界之外。

如果出於某種原因做這種方式,它應該是這樣的:

auto temp = q; 
q = new std::string[x]; 

for(int x = 0; x < 3; ++x) 
    q[x] = temp[x]; 

delete [] temp; 
q[x] = 4; 

然而,這顯然是更爲複雜和非常多容易出錯不是這樣做的慣用方式在C++中。最好用std::vector<std::string>代替。

+0

好了同樣的事情,我想試試。謝謝 –