我需要有一個動態的字符串數組,以便隨時可以擴展它。所以我想用malloc/realloc做到這一點。但每次我試圖運行它,我得到分段錯誤與下面的錯誤從Valgrind的:std :: string的指針數組
==13709== Use of uninitialised value of size 8
==13709== at 0x4EEED9B: std::string::assign(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17)
==13709== by 0x400953: main (test.cpp:12)
==13709==
==13709== Invalid read of size 8
==13709== at 0x4EEED9B: std::string::assign(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17)
==13709== by 0x400953: main (test.cpp:12)
我的代碼看起來像這樣:
int main()
{
string* arr;
arr=(string*) malloc(5*sizeof(string));
arr[0]="test1";
arr[1]="test2";
cout << arr[0] << arr[1] << endl;
}
我知道字符**,但它是一種一個痛苦的使用,所以我想使用字符串。有關如何使其工作的任何提示?
你爲什麼不製作一個'std :: vector'? –
CoryKramer
只要使用'矢量',爲自己節省很多的痛苦。 –
別人說什麼。如果你想知道爲什麼你的代碼不工作,這是因爲'std :: string'是一個類,'malloc'不會調用它的構造函數,所以你基本上試圖訪問未初始化的對象,這會導致運行時錯誤。作爲一個通用規則(在極少數情況下可以被破壞),你不應該將C風格的分配('malloc&free')與C++類(或者如果你想成爲純粹的代碼)混合使用。 – UnholySheep