我不清楚爲什麼這應該失敗,失敗的原因在那裏它:動態分配的字符串數組c
std::string* s;
s = (std::string*)malloc(sizeof(std::string) * 10);
s[0] = "string0";
s[1] = "string1";
s[2] = "string2"; //Segmentation fault
不要緊,什麼串的分配在S上的大小[0] - s [2]是多少,或者多少空間malloc'ed。 QStrings也會發生同樣的情況。我認爲麻煩來自std :: string包含一個內部指針這一事實,所以sizeof()只返回指針的大小,但考慮到std :: string的行爲類似於其他值(=,==等)。 )我不明白爲什麼這會導致失敗。
此外,爲了與其他代碼兼容,我需要在這裏使用C數組,的std ::向量。我正在尋找一個通用的解決方案(這將與QString,QDateTime等),如果有的話。但我很高興知道發生了什麼。
編輯:有一個downvote ......這個問題出了什麼問題?我確實先看了一會兒(包括SO),但沒有發現這個問題。
你真的應該在這種情況下使用'new'(或'new []')來動態分配對象。你不能標記這個C,因爲它是C++。 – 2011-08-07 10:35:12
是的,std在C中是不允許的。 – tjameson
@WTP使用new來動態分配什麼? –