关于C++的delete的事例

关于C++的delete的例子大家帮我看看如下代码能运行不? 谢谢!!我在自己的机子上运行了,是不行的!!#include

关于C++的delete的例子
大家帮我看看如下代码能运行不? 谢谢!!
  我在自己的机子上运行了,是不行的!!

  #include <string>
  #include <iostream>
  using namespace std ;
  int main()
 { 
  string *s1 = new string("hello") ;
  delete s1 ; 
  cout<<*s1<<endl ;
  return 0 ;
  }

  如果有知道原因的请告诉我,谢谢!!

  我在想是不是内存被释放了,对于原先声明的指针所指向内存不存在了,指针悬挂,那么不指向任何对象,再操作指针的话就会出错!

  如果觉得我解释的对的,顶一下,解释不正确了,欢迎正解!!!!

[解决办法]
解释对的
内存被释放了
[解决办法]
correct way:

C/C++ code
 #include <string>#include <iostream>using namespace std ;int main(){    string *s1 = new string("hello") ;  cout<<*s1<<endl ;  delete s1 ;  return 0 ;}
[解决办法]
顶一下,不过你再输出的话,可能会输出乱码的,
[解决办法]
删除了再用结果是不可知的,有可能出错,也有可能不会,所以一般删除指针后要置为NULL
[解决办法]
最后在delete s1;后面加上s1 = NULL;
[解决办法]
点击下载

平台相关的C++代码解决方案+代码,资源分0哦,亲!
[解决办法]
对的,内存释放,而且会调用string的析构。所以你不能再使用该指针
[解决办法]
嗯,对,
[解决办法]
指针所指的内存被释放了,但是指针的值没有改变,即还指向先前的地址,这时运用指针的话,会有意想不到的后果,也就非法访问了内存,所以一般都delete后,置为NULL

[解决办法]
正解(回复不能太短)
[解决办法]
C/C++ code
  #include <string>  #include <iostream>  using namespace std ;  int main() {    string *s1 = new string("hello") ;    cout<<*s1<<endl ;  delete s1 ;  return 0 ;  }
[解决办法]
好吧你是对的, std::string没必要动态分配
[解决办法]
探讨

C/C++ code

#include <string>
#include <iostream>
using namespace std ;
int main()
{
string *s1 = new string("hello") ;

cout<<*s1<<endl ;
delete s1 ;
return 0 ;
}

[解决办法]
你的代码是对的,可以通过编译,输出结果不确定,如果释放后,好的习惯是将指针改为空指针,否则在大型项目中,则会是错误的根源,是各种很难发现的程序错误。
[解决办法]
code::blocks可以通过
[解决办法]
在code::blocks上可以

[解决办法]
楼主刚学编程吧,你的理解是对的!
[解决办法]
学编程要理解好什么是正确的,什么是错误的.

你这样的做法本身就是一个错误,但是是一个编译器没有责任指出来告诉你的错误.

不要依赖编译器"出错"来证明程序的错误 ,靠自己.
[解决办法]
因为内存被释放了,接分。
------解决方案--------------------


这是一种概率问题,s1的内存是释放了,但是,不一定马上被别的程序占用了,对吧
所以,你可能会输出乱码,也可能崩溃,也可能输出是正确的