int* p=malloc(100); p+=10; free(p);

chenggn 2002-05-22 09:41:04
rt
...全文
120 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
prototype 2002-05-25
  • 打赏
  • 举报
回复
to chenggn(chenggn):

if you have 'int* p=malloc(100); p+=10;', then the result of 'free(p);' is undefined.

is that clear?
wyq_linda 2002-05-24
  • 打赏
  • 举报
回复
有一点注意的是:
free()释放的必须是分配的手地址,malloc(),不管你一次
分配的是多大,只要调用free(首地址)就意味着释放了所有的
内存,
prototype 2002-05-23
  • 打赏
  • 举报
回复
the result is undefined, which means anything could happen if you did that.
zzhouj 2002-05-23
  • 打赏
  • 举报
回复
应该可以释放吧
Elminster 2002-05-23
  • 打赏
  • 举报
回复
什么也释放不出来,DEBUG 版本的话,程序会报告运行时错误。
chenggn 2002-05-23
  • 打赏
  • 举报
回复
但是 释放成功。
假如 然后 如果
p-=10;
free(p);

还能释放出什么?
LionEagle 2002-05-23
  • 打赏
  • 举报
回复
agree steedhorse(晨星) and terron(注定编程一生)
terron 2002-05-23
  • 打赏
  • 举报
回复
to 楼主

这样肯定是不行的!
这是因为Windows的内存管理机制好像是什么有个堆的概念,
你在分配内存后,得到的地址在堆中会有记录,你以后只能释放这个地址才能够释放掉这段内存。我不知道我有没有说清楚。
另外,在malloc之前最后有一个强制转换,这是个习惯!
晨星 2002-05-23
  • 打赏
  • 举报
回复
会出问题,因为错作提供的内存分配记录中并没有一处从p+10开始的内存,因此也就不知道怎么释放。
xiaoluoli 2002-05-23
  • 打赏
  • 举报
回复
int* p=malloc(100); p+=10; free(p);
#include"iostream.h"
#include"malloc.h"

int* P=(int *)malloc(sizeof(100*int));
p+=10;//
free(p);//
chenggn 2002-05-23
  • 打赏
  • 举报
回复
en..

free(p+10); undefined or free(p); after that?

or .... neither
Kill_EM_All 2002-05-23
  • 打赏
  • 举报
回复
int *p = new int[100];

delete [] p;

kaneboy 2002-05-23
  • 打赏
  • 举报
回复
??

int * pi;
pi = new int[sizeof(int)*100];
delete[] pi;
carbon107 2002-05-23
  • 打赏
  • 举报
回复
这不行啊
fangrk 2002-05-23
  • 打赏
  • 举报
回复
什么意思?要内存泄漏的

69,371

社区成员

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

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