这段代码会发生什么?

时间:2014-01-03 16:29:52

标签: c++ pointers dynamic

当我这样做时会发生什么?当我删除第一个初始化为" boo1"时,它会打印boo2,但现在它仍然没有打印。这是否意味着指针分配随机存储器并分配" boo1"它的价值,现在我无法访问它或什么?

string *p;
*p="boo1"; 
p=new string;
*p="boo2";
cout << *p;   //prints nothing

3 个答案:

答案 0 :(得分:2)

第1行:“p”包含随机值,即指随机存储器地址。

第2行:“* p”引用的随机存储块被解释为字符串实例。此实例由“boo1”分配。

尝试:

string *p = new string;
*p = "boo1";
cout << *p << '\n';
*p = "boo2";
cout << *p << '\n';
delete p;

请记住:

  1. std :: string与stupid char [] array不同!
  2. 所有指针必须在使用前分配!
  3. 所有“新”必须有相应的“删除”!

答案 1 :(得分:0)

如果将字符串声明为指针(字符串* p),则必须为其分配内存,

所以正确的工作方式是:

string *p = new string;
*p = "boo1";
cout << *p << '\n';
*p = "boo2";
cout << *p << '\n';

答案 2 :(得分:0)

之前的答案是正确的,但为什么不使用引用,在您的情况下似乎更方便。 类似的东西:

std::string p;
p = "boo1";
std::cout << p << std::endl;
p = "boo2";
std::cout << p << std::endl;

此致

米歇尔。