指向向量的指针:出现分割错误
|
我在以下代码中遇到了细分错误。您能帮我弄清楚吗?在下面的代码中,它将打印“ ok here \”。一旦重新分配内存,就会显示分段错误。但为什么 ?有什么办法吗?
任何帮助,将不胜感激。
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
class Cube
{
public:
char *str;
Cube(int len)
{
str = new char[len+1];
}
Cube(const Cube &c)
{
str = new char[strlen(c.str) + 1];
strcpy(str, c.str);
}
~Cube()
{
delete [] str;
}
};
void foo(vector <Cube> *vec)
{
for (int i = 0; i < 10; i++)
{
char in [] = \"hello !!\";
Cube *c = new Cube(strlen(in)+1);
strcpy(c->str, in);
vec->push_back(*c);
cout << \"ok here\" << endl;
delete [] c;
}
}
int main()
{
vector <Cube> vec;
foo(&vec);
return 0;
}
没有找到相关结果
已邀请:
4 个回复
凰葱崎济邯
未实现正确的副本分配运算符。正如其他人提到的那样,您也使
与
不匹配,后者只能流下眼泪。 也就是说,您无需为此使用任何指针或显式动态分配。您应将
的用法替换为
,并且不要在堆上分配任何
对象。在编写良好的C ++程序中,很少使用
,而几乎不需要使用
。 该程序不进行显式动态分配,其结果与您对程序的期望相同,但是是正确的。请注意,当您不用担心自己动态分配或显式破坏事物时,代码会干净得多!
确保您有一本不错的C ++入门书。
豆兢
但是您没有在此处分配数组:
应该只是:
才脊烽馈低
应该
除此之外,“ 1”类本身是可疑的。最好使用ѭ5而不是C样式的字符串。
旗低饶彤
如果c是这样分配的:
然后,delete [] c是合适的。在这种情况下,您应该省略[]。