2012-12-25 64 views
1

我想單獨填充''並將其存儲在數組中的字符串。對於我寫的代碼,CPP中的字符串的內存管理問題

string* componentsOfStringSeperatedBystring(string originalString, string stringCompare){ 

string *arryOfStrings=NULL; 

string *tempArrayString = NULL; 
for (int i=0; i<originalString.length(); i++) { 


    size_t position = originalString.find(stringCompare); 
    cout << "\nposition" <<position; 

    if (position == originalString.npos) { 

     break; 
    } 
    size_t subStringLength = originalString.length() - position; 

    cout << "\nsubStringLength" <<subStringLength; 
    string subString = originalString.substr(0,position); 

    cout << "\nsubString" <<subString; 

    tempArrayString = (string*)realloc(arryOfStrings, (i+1)*sizeof(string)); 

    cout << "\n i \t" <<i; 
    if (tempArrayString != NULL) { 

     arryOfStrings = tempArrayString; 
     arryOfStrings[i] = subString; 
    } 


    cout << "\narryOfStrings" <<arryOfStrings; 
    originalString = originalString.substr(position+1,subStringLength); 
} 

return arryOfStrings; 
} 

我收到墜毀,機上線「arryOfStrings [i] =串;」如果我只是第一次分配足夠的空間,然後重新分配不,我沒有得到墜毀。

+1

第一件要做的事就是使用'std :: vector'來代替那個指針數組。 – chris

+0

+1 @chris爲什麼會有人使用指針字符串和realloc ... –

+0

@rakeshNS你怎麼意思'單獨的字符串充滿'''?你的意思是用''分隔字符串嗎? – billz

回答

1

不要在C++風格的對象上使用C風格的內存管理。要麼完全使用C風格(使用以空字符結尾的char*字符串),要麼完全使用C++風格(使用std::vector<std::string>)。

+0

我使用std :: vector ,現在它正在工作。謝謝 :) – rakeshNS

1

您需要使用new而不是std::string而不是c內存分配函數。
new不同,它們不會調用std::string類的構造函數。並且需要調用std::string類的構造函數以進行正確的初始化。

說實話,你根本不應該使用std::string *。這樣做你會失去所有避免使用char *開始的優點。簡單地使用:

std::vector<std::string>