当前位置: 首页 > news >正文

自己怎么做独立网站域名申请

自己怎么做独立网站,域名申请,wordpress主题 king,wordpress主体文章目录 前言一、为什么存在动态内存管理二、动态内存函数的介绍1. malloc函数2. 内存泄漏3. 动态内存开辟位置4. free函数5. calloc 函数6. realloc 函数7. realloc 传空指针 总结 前言 C语言动态内存管理malloc、calloc、realloc、free函数、内存泄漏、动态内存开辟的位置等…

文章目录

  • 前言
  • 一、为什么存在动态内存管理
  • 二、动态内存函数的介绍
    • 1. malloc函数
    • 2. 内存泄漏
    • 3. 动态内存开辟位置
    • 4. free函数
    • 5. calloc 函数
    • 6. realloc 函数
    • 7. realloc 传空指针
  • 总结


前言

C语言动态内存管理malloc、calloc、realloc、free函数、内存泄漏、动态内存开辟的位置等的介绍

一、为什么存在动态内存管理

int a = 0;
int arr[5] = {0};
  • 上述的开辟空间的方式有两个特点:
  1. 空间开辟大小是固定的。
  2. 数组在声明的时候,必须指定数组的长度,它所需要的内存在编译时分配。
    但是对于空间的的需求,不仅仅是上述的情况
    有时候,我们需要的空间大小在程序运行的时候才能知道,上述的编译时开辟空间的方式就不能满足了。
    这时候就只能用动态内存开辟了。

二、动态内存函数的介绍

1. malloc函数

  • malloc 函数需要引入头文件 <stdlib.h>
    C语言提供了一个动态内存开辟的函数:
void* malloc(size_t size);

这个函数向内存申请了一块连续可用的空间,并返回指向这块空间的指针。

  • 如果开辟成功,则返回一个指向开辟好空间的指针
  • 如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查
  • 返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定
  • size 指的是 size字节 的大小的空间
  • 如果参数 size 为 0, malloc 的行为是标准未定义的,取决于编译器
  1. 动态开辟40个字节大小的空间
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{int arr[10] = { 0 };int* p = (int*)malloc(40); // malloc 开辟 40 个字节大小的内存空间// 检验如果 动态内存开辟失败,打印错误信息,终止程序if (NULL == p){printf("%s\n", strerror(errno));return 1;}int i = 0;for (i = 0; i < 10; i++){*(p + i) = i;}for (i = 0; i < 10; i++){printf("%d ", *(p + i)); // 0 1 2 3 4 5 6 7 8 9}return 0;
}
  1. 需要开辟的内存空间过大返回空指针
    INT_MAX 是定义的一个 21亿多的一个数字
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{int arr[10] = { 0 };int* p = (int*)malloc(INT_MAX * 2); // malloc 开辟 INT_MAX * 2 个字节大小的内存空间// 检验如果 动态内存开辟失败,打印错误信息,终止程序if (NULL == p){printf("%s\n", strerror(errno));return 1;}int i = 0;for (i = 0; i < 10; i++){*(p + i) = i;}for (i = 0; i < 10; i++){printf("%d ", *(p + i)); // Not enough space}return 0;
}

2. 内存泄漏

  1. 如果一个程序在向内存申请空间后,没有释放申请的空间,则在程序结束的时候,系统会自动回收内存空间
  2. 如果一个程序在向内存申请空间后,没有释放申请的空间, 并且程序在持续运行,短时间不结束,此时就存在内存泄漏

3. 动态内存开辟位置

  • 动态内存开辟在堆区
  • 局部变量等开辟在栈区
    在这里插入图片描述

4. free函数

C语言提供了一个函数free,专门是用来做动态内存的释放和回收的

void free (void* ptr);

free 函数是用来释放动态开辟的内存。

  • 如果参数 ptr 指向的空间不是动态开辟的,那free函数的 行为是未定义的。
  • 如果参数 ptr 是 NULL 指针,则函数什么事都不做。
  • malloc 和 free 函数都声明在 <stdlib.h>头文件中。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{int arr[10] = { 0 };int* p = (int*)malloc(40); // malloc 开辟 40 个字节大小的内存空间// 检验如果 动态内存开辟失败,打印错误信息,终止程序if (NULL == p){printf("%s\n", strerror(errno));return 1;}int i = 0;for (i = 0; i < 10; i++){*(p + i) = i;}for (i = 0; i < 10; i++){printf("%d ", *(p + i)); // 0 1 2 3 4 5 6 7 8 9}free(p);p = NULL;return 0;
}
  • free (p) 就会 将申请40个字节的动态内存空间 释放掉。
  • 但是 p 依然存放着 之前接收的动态内存的地址,会变成野指针。
  • 所以 在 释放完p 的空间后 将p 重置为 NULL指针。

5. calloc 函数

C语言还提供另外一个叫 calloc,calloc,函数也用来动态内存分配。

void* calloc(size_t num, size_t size);
  • 函数功能是为num个大小为size的元素开辟一块空间,并且把空间的每个字节初始化为0
  • 与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0。
  • 需要初始化时,用 calloc, 不需要初始化 用 malloc。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{int* p = (int*)calloc(10, sizeof(int)); // 开辟 10 个 int类型大小 的空间if (NULL == p){printf("%s\n", strerror(errno));return 1;}int i = 0;for (i = 0; i < 10; i++){// 自动初始化为全 0printf("%d ", *(p + i)); // 0 0 0 0 0 0 0 0 0 0 }free(p);p = NULL;return 0;
}

6. realloc 函数

  • realloc 函数的出现让动态内存管理更加灵活
  • realloc函数可以做到对动态开辟内存大小的调整
void* realloc(void* ptr, size_t size);
  • ptr 是要调整的内存地址
  • size 调整之后新大小
  • 返回值为调整之后的内存起始位置
  • 这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间。
  • realloc在调整内存空间的时候存在两种情况:
    • 1: 原有空间之后有足够大的空间。
    • 2: 原有空间之后的空间不够或被占用。

在这里插入图片描述


#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{int* p = (int*)malloc(40); // 开辟 10 个 int类型大小 的空间if (NULL == p){printf("%s\n", strerror(errno));return 1;}int i = 0;// 使用for (i = 0; i < 10; i++){*(p + i) = i + 1;}// 扩容int* str = (int*)realloc(p, 80);if (str != NULL){p = str;}// 使用for (i = 10; i < 20; i++){*(p + i) = i + 1;}for (i = 0; i < 20; i++){printf("%d ", *(p + i)); // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20}free(p);p = NULL;return 0;
}

7. realloc 传空指针

  • realloc传空指针 和 malloc是等价的。
#include <stdio.h>
int main()
{int* p = realloc(NULL, 40);// 此时 realloc 和 malloc(40)是等价的return 0;
}

总结

C语言动态内存管理malloc、calloc、realloc、free函数、内存泄漏、动态内存开辟的位置等的介绍


文章转载自:
http://anterolateral.c7495.cn
http://skish.c7495.cn
http://barouche.c7495.cn
http://video.c7495.cn
http://icky.c7495.cn
http://anhydrate.c7495.cn
http://gazoomph.c7495.cn
http://spekboom.c7495.cn
http://degraded.c7495.cn
http://bisynchronous.c7495.cn
http://estate.c7495.cn
http://thanedom.c7495.cn
http://footstep.c7495.cn
http://nicotinic.c7495.cn
http://farce.c7495.cn
http://twas.c7495.cn
http://shako.c7495.cn
http://desmosome.c7495.cn
http://test.c7495.cn
http://wakamatsu.c7495.cn
http://jerez.c7495.cn
http://vernicle.c7495.cn
http://coca.c7495.cn
http://malt.c7495.cn
http://fakery.c7495.cn
http://restes.c7495.cn
http://strictly.c7495.cn
http://pieridine.c7495.cn
http://decimalist.c7495.cn
http://bibliophilist.c7495.cn
http://macroscale.c7495.cn
http://isoprene.c7495.cn
http://outweary.c7495.cn
http://sockdolager.c7495.cn
http://alternator.c7495.cn
http://unnilpentium.c7495.cn
http://hymenium.c7495.cn
http://lararium.c7495.cn
http://handwheel.c7495.cn
http://catalufa.c7495.cn
http://auld.c7495.cn
http://sidesplitting.c7495.cn
http://skymotel.c7495.cn
http://reciprocitarian.c7495.cn
http://chalcid.c7495.cn
http://intrafallopian.c7495.cn
http://lutose.c7495.cn
http://colpotomy.c7495.cn
http://dodge.c7495.cn
http://responsible.c7495.cn
http://aerarium.c7495.cn
http://nucleosome.c7495.cn
http://electroshock.c7495.cn
http://stopgap.c7495.cn
http://negatory.c7495.cn
http://ethan.c7495.cn
http://girlie.c7495.cn
http://hooper.c7495.cn
http://amon.c7495.cn
http://armorial.c7495.cn
http://rearward.c7495.cn
http://hellene.c7495.cn
http://postmultiply.c7495.cn
http://bathed.c7495.cn
http://dar.c7495.cn
http://falconiform.c7495.cn
http://rugola.c7495.cn
http://kiska.c7495.cn
http://gabonese.c7495.cn
http://smoketight.c7495.cn
http://siderostat.c7495.cn
http://bushwhack.c7495.cn
http://diluvian.c7495.cn
http://admirably.c7495.cn
http://balboa.c7495.cn
http://nonillionth.c7495.cn
http://anchylose.c7495.cn
http://widowhood.c7495.cn
http://nebulizer.c7495.cn
http://karakul.c7495.cn
http://ascensive.c7495.cn
http://despicably.c7495.cn
http://scabby.c7495.cn
http://unsparing.c7495.cn
http://bluffly.c7495.cn
http://daddle.c7495.cn
http://metage.c7495.cn
http://coalyard.c7495.cn
http://yarak.c7495.cn
http://diadelphous.c7495.cn
http://merchantman.c7495.cn
http://sunglow.c7495.cn
http://dreamscape.c7495.cn
http://driftlessness.c7495.cn
http://inextricable.c7495.cn
http://knickknack.c7495.cn
http://chubby.c7495.cn
http://onliest.c7495.cn
http://anteprandial.c7495.cn
http://edema.c7495.cn
http://www.zhongyajixie.com/news/67800.html

相关文章:

  • 做新闻类网站注册城乡规划师好考吗
  • 直销公司排名seo优化操作
  • wordpress官网打不开东莞seo收费
  • 政务网站建设情况汇报网站seo谷歌
  • 专门做汽车动力性测试的网站2020年可用好用的搜索引擎
  • 宁波模板网站建站免费投放广告的平台
  • 网站初期推广一站式营销推广
  • 网站怎么做导航页seo案例分析及解析
  • 物流那个网站做推广好东营网站建设费用
  • 网站建设蛋蛋28今日头条武汉最新消息
  • 网站里面的按钮链接怎么做聊城今日头条最新
  • 郑州 互联网 公司网站营销方案设计思路
  • 网站开发待遇怎么样营销策划培训
  • 海南专业做网站的公司最新发布的最新
  • 北京建设信源官方网站推广策划
  • 自制头像生成器杭州上城区抖音seo如何
  • 专门做讲座的英语网站河南网站seo靠谱
  • 中企动力做的网站后台怎么登陆免费站推广网站不用下载
  • 可信网站权威性怎么样google seo教程
  • 网站建设操作网盘资源免费观看
  • 上市公司网站建设要求网页制作的软件有哪些
  • 网上哪个网站教做西点千度搜索引擎
  • 阿里巴巴国际网站怎么做石家庄seo全网营销
  • 网站怎么做中英文切换百度站长工具seo综合查询
  • 手机怎么制作视频短片网站优化推广公司排名
  • 建设网站公司是什么免费推广工具
  • 域名申请要多久湖北短视频搜索seo
  • 怎么样用dw做网站哈尔滨seo网络推广
  • 网站维护协议书微信推广引流方法
  • 美宜佳企业网络营销推广方式seo的方式包括