gpt4 book ai didi

C++ 中malloc()和free()函数的理解

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章C++ 中malloc()和free()函数的理解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

C++ 中malloc()和free()函数的理解 。

   关于malloc和free这两个函数,malloc的用法示例:int *p=(int *)malloc(2*sizeof(int)); 它表示在堆中开辟一块大小为2*sizeof(int)的一块内存空间,p指向这块内存空间的起始地址,malloc前面的(int*)表示这块空间用来存储int型数组。开辟了这块空间后,可以修改这个空间中的值,例如为*p,*(p+1)做赋值操作,如果再次使用malloc函数,例如再写一个 int *q=(int *)malloc(2*sizeof(int)); 此时开辟的以q为起始地址长度为2*sizeof(int)的空间是不会覆盖p所指向的空间的。但是,如果在int *q=(int *)malloc(2*sizeof(int));之前写一个free(p),那么,q所指向的空间则有可能覆盖p指向的空间。所谓的free(p)操作,其实是修改p所指向的空间的标记值,让其可以被覆盖。尽管执行了free(p),p仍就指向以前的起始地址,依旧可以对*p,*(p+1)赋值,并且可访问他们(例如输出).

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(){
   int *p=( int *) malloc (2* sizeof ( int ));
   free (p);
   *p=1;
   *(p+1)=2;
   cout<<p<<endl<<(p+1);
   cout<<endl;
   cout<<*p<<endl<<*(p+1);
 
   int *q=( int *) malloc (2* sizeof ( int ));
   cout<<endl<<q<<endl<<(q+1);
   cout<<endl<<*q<<endl<<*(q+1);
   return 1;
}

运行结果:

C++ 中malloc()和free()函数的理解

补充:

int *p=(int *)malloc(2*sizeof(int)); 若要释放这段空间,必须free(p),只是单单想释放部分空间,例如free(p+1)是不允许的.

以上就是C++ 中malloc()和free()函数的实例详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! 。

原文链接:http://blog.csdn.net/littlebeat123/article/details/38442403 。

最后此篇关于C++ 中malloc()和free()函数的理解的文章就讲到这里了,如果你想了解更多关于C++ 中malloc()和free()函数的理解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com