关于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没必要动态分配
[解决办法]
[解决办法]
你的代码是对的,可以通过编译,输出结果不确定,如果释放后,好的习惯是将指针改为空指针,否则在大型项目中,则会是错误的根源,是各种很难发现的程序错误。
[解决办法]
code::blocks可以通过
[解决办法]
在code::blocks上可以
[解决办法]
楼主刚学编程吧,你的理解是对的!
[解决办法]
学编程要理解好什么是正确的,什么是错误的.
你这样的做法本身就是一个错误,但是是一个编译器没有责任指出来告诉你的错误.
不要依赖编译器"出错"来证明程序的错误 ,靠自己.
[解决办法]
因为内存被释放了,接分。
------解决方案--------------------
这是一种概率问题,s1的内存是释放了,但是,不一定马上被别的程序占用了,对吧
所以,你可能会输出乱码,也可能崩溃,也可能输出是正确的
