首页 / C语言 / C语言 - 申请内存
C语言 - 申请内存
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C语言 - 申请内存,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1918字,纯文字阅读大概需要3分钟。
内容图文
![C语言 - 申请内存](/upload/InfoBanner/zyjiaocheng/954/91c27129b5a94d1d941b67b595b3bdcc.jpg)
C语言 - 申请内存
1、void * malloc(size_t size)
//头文件
#include<malloc.h>
- 申请空间是来连续的堆空间
- 需要么memset初始化
- 使用完需要释放free
- 返回空间的首地址
代码:
typedef struct Node{
int data;
struct Node * next;
}LNode;
void main()
{
LNode * p = NULL;
p = (LNode *)malloc(sizeof(LNode));
if(NULL == p)
{
printf("malloc failed.\n");
return;
}
printf("p address is %#x\n", p);
free(p);
p = NULL;
}
运行结果
[root@localhost home]# gcc -o client ClientM.c
[root@localhost home]# ./client
p address is 0x7f7010
[root@localhost home]#
2、void * calloc(int num,size_t size);
//头文件
#include<malloc.h>
- num:元素数目,
- 不需要memset
- 申请到的是连续的堆空间,即申请num个大小为size的连续地址空间
- 需要释放
代码
typedef struct Node{
int data;
struct Node * next;
}LNode;
void main()
{
LNode * NodeArr = NULL;
NodeArr = (LNode *)calloc(10, sizeof(LNode));
if(NULL == NodeArr)
{
printf("calloc failed.\n");
return;
}
printf("NodeArr address is %d\n", NodeArr);
free(NodeArr);
NodeArr = NULL;
}
3、void * realloc(void * ptr, size_t new_size)
//头文件
#include<malloc.h>
- realloc函数用于修改一个原先已经分配的内存块的大小,可以使一块内存的扩大或缩小。
- 当起始空间的地址为空,即*ptr = NULL,则同malloc。
- 当ptr非空:若nuw_size <
size,即缩小ptr所指向的内存空间,该内存块尾部的部分内存被拿掉,剩余部分内存的原先内容依然保留; - 若nuw_size >
size,即扩大*ptr所指向的内存空间,如果原先的内存尾部有足够的扩大空间,则直接在原先的内存块尾部新增内存,如果原先的内存尾部空间不足,或原先的内存块无法改变大小,realloc将重新分配另一块nuw_size大小的内存,并把原先那块内存的内容复制到新的内存块上。因此,使用realloc后就应该改用realloc返回的新指针。
注意:再调用完realloc后就不能使用指向就内存的指针,而是用返回的新的指针。
代码:
#include<Windows.h>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
int main()
{
const int size = 2000;
int *p = (int *)malloc(20 * sizeof(int));
int *p1 = (int *)realloc(p, size*sizeof(int));
printf("%x\n", p);
printf("%x\n", p1);
system("pause");
return 0;
内容总结
以上是互联网集市为您收集整理的C语言 - 申请内存全部内容,希望文章能够帮你解决C语言 - 申请内存所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。