2013-06-01 67 views
2

我想動態分配一個std::string的數組。有一個功能可以分配。我可以通過該程序按照我想要的次數調用該函數。如果已經分配了指向數組的指針,我想先釋放內存然後分配新的內存。動態分配std :: string數組

這裏是我的嘗試:

std::string *names; 
bool already_allocated = false; 
void allocate(int n) 
{ 
    if(already_allocated) 
    { 
     delete names; 
    } 
    names = new std::string[n]; 
    already_allocated = true; 
} 

int main() 
{ 
    allocate(5); 
    allocate(6); 
    return 0; 
} 

但它給運行時錯誤在第二allocate()呼籲行delete names

我誤解的東西嗎?

+4

爲什麼不使用'std :: vector '和'resize'? – Andrei

回答

2

您必須使用delete [] names;,因爲您要刪除一個字符串數組,delete names;會刪除單個對象。

2

不能陣列上調用delete names,你應該使用

delete[] names 

代替。

如何使用std::vector<std::string>代替您的names數據結構?

1

當你使用new分配內存時,你可以使用delete操作符,但是當你使用new []分配內存的時候,爲了避免內存泄漏,使用delete []操作符來刪除爲數組分配的內存。

delete[] names