请问new 申请一个char数组的内存地址空间,可以用free来释放吗?

例如:
char *p = new char[128];
free(p);
这样做可以吗?

new和delete是c++的运算符,在没有重载的时候,默认也是调用mallloc()和free(),由于c++的类有构造函数和析构函数,为类的对象指针分配内存时需要对该类对象初始化数据,释放内存时需要有可能需要释放对象内部的成员的内存,用new和delete就会去干这些事情,而调用mallloc()和free()函数,需要手动去处理类对象的构造和析构。这种情况下使用你上面的写法将会导致类成员的new分配出来的内存得不到释放而造成内存泄漏。也就是说C/C++的基本类型在new和delete运算符没有重载的时候,这样子操作是不会有大问题的,但是不是一个好的编程习惯,可读性差,容易让人误解,最好是成对出现:new出来的就使用delete释放, malloc分配的就用free释放。保持良好编程习惯有利于编程成长。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-11
可以是可以,free是C的语法,和malloc之类的配对,new是C++的语法,和delete配对,但是不建议这么用,这和程序空间申请释放的机制有关系,C++的delete多了析构部分
第2个回答  2012-10-11
可以用free释放,因为new的是内部数据类型,但是如果new的是非内部数据类型,需要用delete来释放。delete会调用析构函数,而free只是释放内存,不调用析构函数。
第3个回答  2012-10-11
有new就一定要用delete搭配
第4个回答  2012-10-11
这样是不可以的,new只能和delete配合使用
第5个回答  2012-10-11
基本类型应该是可以的,但是对于自建类型,建议使用delete []p; 的格式,否则很容易内存泄露。
相似回答