【发布时间】:2011-10-21 18:43:22
【问题描述】:
我不清楚为什么会失败,以及为什么会失败:
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] 的字符串的大小是多少,或者分配了多少空间都没有关系。 QStrings 也会发生同样的事情。我认为问题出在 std::string 包含一个内部指针这一事实,因此 sizeof() 只返回指针的大小,但鉴于 std::strings 的行为与其他值类似(=、== 等。 ) 我不明白为什么这里会导致失败。
另外,为了与其他代码兼容,我需要在这里使用 C 数组,而不是例如标准::向量。如果有的话,我正在寻找一种通用的解决方案(可以与 QString、QDateTime 等一起使用)。但我很高兴知道发生了什么。
编辑:投了反对票...这个问题有什么问题?我确实先环顾了一会儿(包括 SO),没有发现这个问题。
【问题讨论】:
-
您确实应该使用
new(或在这种情况下为new[])来动态分配对象。而且你不能标记这个 C,因为它是 C++。 -
是的,C 中不允许使用 std。
-
@WTP 使用new动态分配到底是什么?
-
@Matt Phillips 在本例中为
std::string对象。 -
@WTP 很公平,代码不是 C,但它是 C 表示和分配数组的方式,而不是例如。标准::向量。
标签: c++ arrays string pointers