0038 内存分配
/*
C语言中提供了3个动态内存分配函数:
1)malloc 函数
格式: void * malloc(unsigned size);
从内存的堆区分配大小为size个字节的连续的内存空间
如果内存分配成功 返回内存的首地址
失败 NULL
*/
#include <stdio.h>
#include <stdlib.h>
/**
* malloc函数的使用
*/
void test1(){
//从内存中申请一块内存空间,可以存储4个整数
// = 赋值,要求等号的左右两侧的类型要一致
//p中存放的事新申请的内存空间的首地址
//注意:malloc 申请的内存空间,如果我们不赋值?
// 是垃圾数
int *p = (int *)malloc(4*sizeof(int)); //16个字节
//使用一个函数给malloc申请的空间进行初始化
memset(p,'a',16);
if (p!=NULL) {
//申请成功做的事情
// *p = 10;
// *(p+1) = 100;
// *(p+2) = 1000;
// *(p+3) = 10000; //存放4个整数
}else{
//内存申请失败
printf("内存申请失败!\n");
}
for(int i=0;i<4 ;i++){
printf("%c\t",*(p+i));
}
}
void test2(){
//callloc 分配指定块数和长度的内存空间
//格式:calloc(块数,长度)
//分配了4块,每一块内存长度为4的内存空间
//他们的地址也是连续的
//注意事项:
//calloc 它使可以帮我们自动的初始化为0
int *p = (int *)calloc(4, sizeof(int)); //16个字节
if (p!=NULL) {
//申请成功做的事情
*p = 10;
*(p+1) = 100;
*(p+2) = 1000;
*(p+3) = 10000; //存放4个整数
}else{
//内存申请失败
printf("内存申请失败!\n");
}
for(int i=0;i<4 ;i++){
printf("%d\t",*(p+i));
}
}
int main(int argc, const char * argv[]) {
int *p = (int *)malloc(4*sizeof(int)); //16个字节
printf("old %p\n",p);
//realloc 函数可以给已经存在的空间扩充大小
p = realloc(p, 40*sizeof(int));
printf("new %p\n",p);
//40个内存空间
if (p!=NULL) {
//申请成功做的事情
*p = 10;
*(p+1) = 100;
*(p+2) = 1000;
*(p+3) = 10000; //存放4个整数
*(p+39)= 1;
printf("%d\n",*(p+39));
}else{
//内存申请失败
printf("内存申请失败!\n");
}
for(int i=0;i<4 ;i++){
printf("%d\t",*(p+i));
}
return 0;
}
//
// main.c
// 07-野指针和内存泄露
//
// Created by apple on 15/1/9.
// Copyright (c) 2015年 itcast. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
int *p1;
int *p = (int *)malloc(4*sizeof(int)); //16个字节
if (p!=NULL) {
//申请成功做的事情
*p = 10;
*(p+1) = 100;
*(p+2) = 1000;
*(p+3) = 10000; //存放4个整数
}else{
//内存申请失败
printf("内存申请失败!\n");
}
//应该使用free()函数释放内存空间
//free(要释放的空间的首地址)
free(p);
//free(p)以后,p是一个野指针
p = NULL;
*p = 100;
printf("%d\n",*p);
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥