社区
C语言
帖子详情
int* p=malloc(100); p+=10; free(p);
chenggn
2002-05-22 09:41:04
rt
...全文
120
15
打赏
收藏
int* p=malloc(100); p+=10; free(p);
rt
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
什么意思?要内存泄漏的
int
*p和(
int
*)p的区别;返回多个值给主函数的做法;
int
*p=new
int
[n]的用法;
int
*p = (
int
*)
malloc
(n*sizeof(
int
))的含义
int
*p和(
int
*)p的区别 (
int
**)p;//强制将变量p转换成指向
int
类型指针变量的 指针(转换后p是指向指针的指针) (
int
*) *p;//强制将变量 *p 转换成指向
int
类型的指针变量,(*p当成整体做强制转换,这么看来,p也可能是一个指向指针的指针) *(
int
)p;//强制将变量p转换成指向
int
类型变量的指针,再取这个指针变量指向的值;相当于((
int
...
int
*p = &a、p = &a、*p = a的正确理解
C++指针表达、引用、野指针、内存分配
free
函数的使用
前面定义了一个指向动态内存的指针变量p:
int
*p =
malloc
(sizeof *p); 前面讲过,动态分配的内存空间需要程序员手动编程释放。那么怎么释放呢?使用
free
函数。
free
函数的原型: #include<stdlib.h> void
free
(void *p);
free
函数无返回值,他的功能是释放指针变量p所指向的内存单元。此时p指向的那个内存单元将会被释放并...
void getmemory(char *p) { p=(char*)
malloc
(
10
0
); }
错误程序: void GetMemory( char *p ) { p = (char *)
malloc
(
10
0
); } void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, “hello world” ); pr
int
f( “%s”,str ); } 这个一个考验对指针理解的题目,上面程序在运行之后: 1,调用GetMemory( str )后, str并未产生变化,依然是NULL.只是改变的str的一个拷
程序改错题
一、下面程序有什么错误: swap(
int
*p1,
int
*p2) {
int
*p; *p=*p1; *p1=*p2; *p2=*p; } //这里p是一个野指针,应改为: void swap(
int
*p1,
int
*p2) {
int
p; p=*p1; *p1=*p2; *p2=p; }//可以实现函数外部*p1 *p2的交换 void s
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章