使用_strdup函数后用释放内存用delete和free有什么区别

TerryZhao1086 2009-06-11 10:27:40
/****************************
_strdup函数复制一个字符串,使用完后要记得删除在函数中动态申请的内存。
但我不知道用delete和free之间有什么不同。
*****************************/

#include <iostream.h>
#include <string.h>
#include <stdlib.h>
void main( void )
{
char buffer[] = "Buffer Text";
char *New;
cout << "Original: " << buffer << "\n";
New = _strdup( buffer );
cout << "Copy : " << New << "\n";
delete [] New;//原先程序用的
// free(New);//我自己加的,好像也看不出二者的区别。
}
代码如上,使用_strdup函数后用释放内存用delete和free有什么区别?好像二者都可以啊。
...全文
857 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hongwei217 2009-06-11
  • 打赏
  • 举报
回复
这依赖于 _strdup函数 的内存申请关键字是用了 new 还是 malloc.
对于对象来说,
free 的确释放了对象的内存,但是不调用对象的析构函数.
delete不仅释放对象的内存,并且调用对象的析构函数.
所以在对象中用free删除new创建的对象,内存就有可能泄露在delete内部仍调用了free.
不过, 你这里好像都可以用的, 或许还和编译器有关吧!
lylm 2009-06-11
  • 打赏
  • 举报
回复
MSDN例子:

Because _strdup calls malloc to allocate storage space for the copy of strSource, it is good practice always to release this memory by calling the free routine on the pointer returned by the call to _strdup.

Example

/* STRDUP.C */

#include <string.h>
#include <stdio.h>

void main( void )
{
char buffer[] = "This is the buffer text";
char *newstring;
printf( "Original: %s\n", buffer );
newstring = _strdup( buffer );
printf( "Copy: %s\n", newstring );
free( newstring );
}

yang_e_2009 2009-06-11
  • 打赏
  • 举报
回复
应该是没有什么区别吧
free是C库函数
delete是C++操作符
效果是一样的^_^
goodname 2009-06-11
  • 打赏
  • 举报
回复
这个应该用free
http://msdn.microsoft.com/en-us/library/y471khhc(VS.80).aspx

The _strdup function calls malloc to allocate storage space for a copy of strSource and then copies strSource to the allocated space.
lylm 2009-06-11
  • 打赏
  • 举报
回复
new->delete
malloc->free
要配对使用

都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete 会调用对象的destructor,而free 不会调用对象的destructor.

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧