2013-10-29 83 views
1

在篩選了此處的許多帖子後,遇到了很多麻煩。所有東西都編譯好了,但是在這個函數中我得到了一個崩潰,它應該動態地將一個數組的地址分配到這個指針數組中。我看到一個或兩個內存地址發佈,所以我不知道爲什麼它會在這期間崩潰。分配動態分配的指針陣列

string *copyArray(string ptrArray[],int sizeArray) 
    { 
    string **dynamString = new string*[sizeArray]; 
    int i; 

    for (i=0;i<=sizeArray;++i) 
     { 
     (*dynamString[i]) = ptrArray[i]; 
     cout << dynamString[i]; 
     } 
    return *dynamString; 

} 

從主我有:

string *arrPtr; 

和函數調用

arrPtr = copyArray(arrayOfStrings, arraySize); 
+0

請考慮使用矢量。 – 0x499602D2

+1

爲什麼不使用'vector '?不要自己管理記憶。 – Mahesh

回答

7
for (i=0;i<=sizeArray;++i) 

訪問的元件陣列產生一個未定義的行爲後面。元素索引從0sizeArray - 1。另一個問題是,你分配的指針數組:

string **dynamString = new string*[sizeArray]; 

,然後你derefencing這些指針雖然他們不指向任何對象尚未:

(*dynamString[i]) = ptrArray[i]; 

這也導致未定義的行爲 。如果你想創造一個深拷貝,你應該分配內存的每個對象還有:

for (i = 0; i < sizeArray; ++i) 
{ 
    dynamString[i] = new std::string(ptrArray[i]); 
    cout << *dynamString[i]; 
} 

然而,你應該避免使用C風格的數組總是當它是可能的,喜歡的STL容器代替。在這種情況下,它可能是整潔std::vector<std::string>它的構造會(有沒有可能的內存泄漏只是更安全,更合理的方式)做同樣的比你的功能:

std::vector<std::string> myStrings(arrayOfStrings, arrayOfStrings + arraySize); 
+0

好的我看到你在說什麼,我解決了這個問題,不幸的是,在27中的2中仍然崩潰。 – lloyd

+0

@lloyd:我編輯了我的答案。 – LihO

1

確定我固定在這裏。我的指針語法不正確。這是正確的語法。

dynamString[i] = &ptrArray[i];