不是用malloc分配的内存可以用free来释放吗?

jplayer 2006-08-11 09:09:54
比如:
int i=10;
free(&i);
这样子可以吗?
...全文
537 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
OOPhaisky 2006-08-11
  • 打赏
  • 举报
回复
int i=10;
free(&i);
---------------------
这是绝对的错误,会给你的程序带来灾难。
原因:free(p)时,编译器要根据指针p所指向的内存位置前面的一块区域中的信息(这块区域的格式、内容针对不容的实现有所不同,但是有一点是肯定的:这块区域中的信息所分配的内存块有关。楼主应该可以想象的到,这块区域是由malloc函数填充的)来决定要释放的内存大小。所以,free(&i);肯定出问题,因为“&i”不是由malloc分配的,前面也没有“信息块”,那free根据什么释放内存呢??只能是“释放错误大小的内存”了!!
yayafu 2006-08-11
  • 打赏
  • 举报
回复
不行的
MorningTea 2006-08-11
  • 打赏
  • 举报
回复
不可以
int i=10;
不用自己手动释放~~~~
我啃 2006-08-11
  • 打赏
  • 举报
回复
内存分配函数要求很搞都是要求配对出现的new<->delete malloc<->free
其他的ALLOCATOR都有各自的NEW和DELETE函数
syqh2006 2006-08-11
  • 打赏
  • 举报
回复
不可以的,同样,不是NEW创建的,也不能用Delete删除。
Heaven_Redsky 2006-08-11
  • 打赏
  • 举报
回复
这里的i是值类型变量 它的空间是在运行时栈里的
而我们通常所用的mallloc\new 和free\delete所操作的都是类似指针的对象
这些对象是在堆里的
云梦谭 2006-08-11
  • 打赏
  • 举报
回复
不可以
lj860603 2006-08-11
  • 打赏
  • 举报
回复
不可以!malloc和free是配对存在的。
Bible_Chou 2006-08-11
  • 打赏
  • 举报
回复
The realloc function changes the size of an allocated memory block. The memblock argument points to the beginning of the memory block. If memblock is NULL, realloc behaves the same way as malloc and allocates a new block of size bytes. If memblock is not NULL, it should be a pointer returned by a previous call to calloc, malloc, or realloc.
wxc2006 2006-08-11
  • 打赏
  • 举报
回复
全部答错.

realloc 难道不能用 free? 哈哈

不要跟我说 realloc 等于 malloc
honeysuckle1 2006-08-11
  • 打赏
  • 举报
回复
这里的i是值类型变量 它的空间是在运行时栈里的
而我们通常所用的mallloc\new 和free\delete所操作的都是类似指针的对象
这些对象是在堆里的

堆内存是在运行时分配的,栈内存也是么?不是在编译时候分配的么??

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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