时间:2021-05-20
C语言动态内存分配的详解
1.为什么使用动态内存分配
数组在使用的时候可能造成内存浪费,使用动态内存分配可以解决这个问题。
2. malloc和free
C函数库提供了两个函数,malloc和free,分别用于执行动态内存分配和释放。
(1)void *malloc(size_t size);
malloc的参数就是需要分配的内存字节数。malloc分配一块连续的内存。如果操作系统无法向malloc提供更多的内存,malloc就返回一个NULL指针。
(2)void free(void *pointer);
free的参数要么是NULL,要么是一个先前从malloc、calloc或realloc返回的值。
3. calloc和realloc
(1)void *calloc(size_t num_elements,size_t element_size);
calloc也用于内存分配。malloc和calloc之间的主要区别是后者在返回指向内存的指针之前把它初始化为0。
(2)realloc(void *ptr,size_t new_size);
realloc函数用于修改一个原先已经分配的内存块的大小。如果它用于扩大一个内存,那么这块内存原先的内容依然保留,新增加的内存添加到原先内存块的后面。如果它用于缩小一个内存块,该内存块尾部的部分内存被拿掉,剩余部分内存的原先内容依然保留。
4. 使用动态分配的内存
(1)使用示例
int *pi;pi = malloc(25 * sizeof(int));if(pi == NULL){printf("out of memery\n");exit(1);}(2)使用间接访问
int *pi2,i;pi2 = pi;for(i = 0;i < 25;i += 1)*pi2++ = 0;也可以使用下标。
int i;for(i = 0;i < 25;i += 1)*pi[i] = 0;5. 常见的动态内存错误
常见的错误有:对NULL指针进行解引用操作、对分配的内存进行操作时越过边界、释放并非内存分配的内存、试图释放一块动态分配的内存的一部分以及一块动态内存释放之后被继续使用。
以上就是对C语言中动态内存分配的资料讲解,如有疑问请大家留言或者到本站社区讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1.动态内存分配的意义(1)C语言中的一切操作都是基于内存的。(2)变量和数组都是内存的别名。①内存分配由编译器在编译期间决定②定义数组的时候必须指定数组长度③
C语言malloc()函数:动态分配内存空间头文件:#includemalloc()函数用来动态地分配内存空间(如果你不了解动态内存分配,请查看:C语言动态内存
1、C++中的动态内存分配通过new关键字进行动态内存申请C++中的动态内存申请时基于类型进行的delete关键用于内存释放C语言其实是不支持动态内存分配的,是
C++中继承与动态内存分配的详解继承是怎样与动态内存分配进行互动的呢?例如,如果基类使用动态内存分配,并重新定义赋值和复制构造函数,这将怎样影响派生类的实现呢?
C语言动态内存分配详解动态内存分配涉及到堆栈的概念:堆栈是两种数据结构。堆栈都是数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除