请问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; 的格式,否则很容易内存泄露。

请问new 申请一个char数组的内存地址空间,可以用free来释放吗?
new和delete是c++的运算符,在没有重载的时候,默认也是调用mallloc()和free(),由于c++的类有构造函数和析构函数,为类的对象指针分配内存时需要对该类对象初始化数据,释放内存时需要有可能需要释放对象内部的成员的内存,用new和delete就会去干这些事情,而调用mallloc()和free()函数,需要手动去处理类...

C语言里如何使用free()释放字符串内存
由于free和malloc配对使用,malloc的时候,大小已经告诉系统了。free的时候,系统会比对一下这个地址,是不是malloc申请的,如果不是,不给释放 如果是的话,系统就知道要释放多大内存,因为malloc的时候,系统有记录的。当然了,申请的地址,也记录了的,否则,就无法比对了。include <stdio.h> include <...

用C语言分配开辟内存问题
下一个:new和malloc()分配的空间都是在堆区,堆你就可以随意申请了,系统会在系统空闲的链表中找出你要申请空间的大小,标志为已经使用了,然后就会给你用 在申请空间后,注意检测一下申请空间返会值,为NULL就是系统给你分配空间失败了,用完了之后,你需要delete或free()掉你申请的,然后系统就...

C语言中free函数的用法
free 不管指针指向多大的空间,均可以正确地进行释放,这一点释放比 delete\/delete [] 要方便。如在分配指针时,用的是new或new[]。在释放内存时,并不能图方便而使用free来释放。反过来,用malloc 分配的内存,也不能用delete\/delete[]来释放。举例:int* p = (int *) malloc(4);p = 100;fr...

...new申请的空间能否用realloc来重新分配?如果可以,那么能否用delete来...
new除了申请空间还有执行构造函数作用,new出来如果是数组,用delete[]释放时会根据数组个数执行析构,所以new,delete和alloc类函数是不同的两套处理流程,不可能会通用。需要重分配只能用alloc。如果既需要重分配又要执行对象构造析构,参考下placement new。

请问new char是C++还是C语言的呢?它的作用是什么,如果是C++的转换成...
使用new申请的内存必须使用delete函数释放,就像C语言中使用free函数释放一样,否则会造成内存泄漏 改成a=(char )malloc((n+1)*sizeof(char));也可以,不过比new char多分配了一个char的内存空间,倒也无关紧要。因为C++是兼容C语言的语法和运行库的,所以改动后的语句是可以在C++环境下运行的。

C语言:关于FREE()函数的用法
不可以的。malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用...

C语言 malloc()函数 分配内存空间尺寸的问题
不要和机器逗着玩(分配0空间,或少于自己实际需要的空间),如你上面的操作,表面上你程序运行没有问题,可实际上你占用了别人的地盘,只是当前你很幸运没有使程序出现问题,但不保证一定不出问题!!不再使用的指针,一定要free()来释放空间!malloc 与free要配对使用,即:有malloc必要有free ...

怎么用new定义一个类数组,并且释放内存
delete 来释放内存 通用格式是:delete 指针名;注意 delete 与 new 配对,只能释放 new 分配的内存。delete只能用一次,不能释放指针两次。new 创建动态数组 通用格式是:类型名 * 指针 = new 类型名 [ 数组大小 ];如 char * pc = new char [234];pc 被赋值为第一个元素的地址,指向第一个...

c语言字符数组如何释放消毁?
你提问中定义方式是在函数完成前释放不了的,你定义的字符数组,放在stack空间,不能用free()试图释放堆中的内容,因为那里是一段程序运行的保证。只有使用malloc()在栈空间开辟的动态内存才能被释放!如果你后面的代码想继续用这个数组名的话,这个数组还是可以重新赋值。你可以把你用到的数据独到这个变量中就行了!你定...

相似回答