C语言内存处理

作者: Izzieo_O | 来源:发表于2016-02-09 22:29 被阅读1244次

1.动态存储分配

1.1.内存分配函数

在stdlib.h中声明
(1)malloc():分配内存块,不初始化分配的内存块
(2)calloc():分配内存块,且对内存块进行清除
(3)realloc():调整之前已分配的内存块
malloc不需要对已分配的内存块进行清除

1.2.空指针

调用内存分配函数时,可能会出现出发对所需的最大的内存块进行定位,出现这样的问题,就会返回空指针。

2.动态分配字符串

(1)使用malloc()函数分配

调用该函数分配内存,但没有为其指定名字。而是返回分配的内存区中的一个字节的地址,该地址可以被赋值给一个指针变量,通过指针访问内存。
malloc()函数原型:

void *malloc(size_t size)
(2)字符串函数中使用动态存储分配
//定义一个函数,希望不改变任何一个字符串而完成字符串的拼接
char *newStr;
    newStr =(char *) malloc(strlen(s1) + strlen(s2) + 1);
    if (newStr==NULL)
    {
        printf("ERROR");
        exit(EXIT_FAILURE);
    }
    strcpy(newStr, s1); //s1复制到新内存区
    strcat(newStr, s2); //s2拼接到新字符串后面

3.动态分配数组

3.1.使用malloc分配

//使用malloc 函数申请40个float类型内存空间,使用指针p指向该空间所在位置
float *p;
p=(float*) malloc (40*sizeof(float));

3.2.calloc()函数

函数原型

void *calloc(size_t nmemb, size_t size);

成功分配内存后,该函数会将内存块中的所有位都置0以完成初始化。

long *new;
new=(long*)calloc(100,sizeof(long));

3.3.realloc()函数

函数原型

void *realloc(void *ptr, size_t size);

调用该函数时,指针ptr必须是已经指向了某个内存块,且该内存块必须是之前调用malloc()\calloc()\realloc()函数时分配的。size表示内存块的新尺寸。

如果不能成功完成内存块的扩充,则返回空指针。
如果调用realloc()时将其第一个实际参数设置为空指针,则realloc()就为malloc().
如果调用时以0作为第二个参数,则该函数负责释放掉内存块。

4.释放内存

4.1.free()函数

free()的实参必须是指针,且必须是由free之前的内存分配函数返回的。

4.2.“无效指针”

free()释放了不再需要的内存,节省堆空间。但是指针它的指针仍然存在,指向的仍是之前释放掉的空间。

相关文章

  • C语言内存处理

    1.动态存储分配 1.1.内存分配函数 在stdlib.h中声明(1)malloc():分配内存块,不初始化分配的...

  • C语言程序内存布局

    C语言笔记之02-C语言程序内存布局 我们知道C语言的编译过程分为:预处理-编译-汇编-链接-生成可执行文件,而这...

  • Objective-C、C++以及C之间的区别

    C语言的特点: 1)C语言是结构化语言,层次清晰,调试和维护比较容易 2)表现能力和处理能力比较强,可直接访问内存...

  • 预处理和内存管理

    预处理和内存管理 1. 什么是预处理? 预处理是 C 和 C++ 语言独有的特色,它允许开发人员定义宏,编译器在编...

  • Objective-C 内存管理基础

    前言 之前的两篇拙文C语言-内存管理基础、C语言-内存管理深入 介绍了关于C语言在内存管理方面的相关知识。但是对于...

  • iOS面试:iOS内存分区

    OC语言是C语言的超集,所以先了解C语言的内存模型的内存管理会有很大的帮助。C语言的内存模型分为5个区:栈区、堆区...

  • 《深入理解计算机系统》——Ch2-MemoryⅡ

    这一章继续学习内存。如何把C语言的变量存到内存,C语言中的指针和数组在内存的存取方式。 1 C语言中的&和* 第一...

  • iOS修饰符详解与block使用精粹

    #C语言内存分配 Objective-C从名字来看就可以知道是一门超C语言,所以了解C语言的内存模型对于理解Obj...

  • Objective-C-(二)内存管理

    由于Objective-C是基于C语言的,在了解Objective-C内存管理前应该先了解下C语言的内存模型。 简...

  • C语言和其他高级语言的最大的区别是什么?

    提到C语言,我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的! 我们需要知道——变量,其实是内存地...

网友评论

    本文标题:C语言内存处理

    本文链接:https://www.haomeiwen.com/subject/hrwykttx.html