Chinaunix

标题: 大家来评论下 [打印本页]

作者: aoyang888    时间: 2011-08-16 10:51
标题: 大家来评论下
#include <iostream>
using namespace std;
int main()
{
        char *str;
        str = new char[1];
        str = "abc";
        cout<<str<<endl;
        return 0;
}
这个程序有什么严重的后果?
作者: fender0107401    时间: 2011-08-16 10:52
没啥严重后果,程序结束以后内核会回收所有内存。
作者: liwangli1983    时间: 2011-08-16 13:48
分配那一字节(实际上可能更多)内存永远不会被回收了(如果程序一直运行的话),所谓的内存泄露。当然在这个小程序里是无所谓了
作者: jiayanfu    时间: 2011-08-16 14:00
2喽和3喽的答案不一样,大家来讨论一下子。站队喽!我顶3楼!
作者: davidfoxhu    时间: 2011-08-16 14:08
还好,你没delete!
更幸运的是,你不是某个大工程中,哈哈!~
作者: aoyang888    时间: 2011-08-16 15:09
恩 ,3 、5楼的看法不错,但是怎么去delete它了,指向堆的指针没了

#include <iostream>
using namespace std;
int main()
{
        char *str;
        str = new char[1];
        delete str;
        str = "abc";
        cout<<str<<endl;
        return 0;
}
各位看看这段代码有问题吗?
作者: fender0107401    时间: 2011-08-16 16:51
虽然我不怎么懂C++,但是我认为你这个代码非常有趣。
作者: txdgtwpv    时间: 2011-08-16 17:46
没关系,总会遇到'\0'的
作者: nth2say    时间: 2011-08-19 09:43
2、3L答案是一样的。
会有1字节泄漏,程序结束后系统回收。
delete就出错。
作者: Fatihyang    时间: 2011-08-19 11:45
首先本来就应该避免  这种后果 如果用在工程里面 也许没事 也许产生很严重的后果
\0是总会遇到的 字符越界 历来都是被 严厉禁止的
作者: zylthinking    时间: 2011-08-19 11:48
我就知道一个严重后果 char* = const char*, 编译器**
作者: zylthinking    时间: 2011-08-19 11:49
靠, 坝工总可以了吧




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2