汉扬编程 C语言入门 第三十章、分配内存函数malloc

第三十章、分配内存函数malloc

一般来说所有程序都必须留出足够的内存来存储他们使用的数据,在平常我们定义的变量就是系统自动给分配的内存,例如:

第三十章、分配内存函数malloc

第三十章、分配内存函数malloc

这一章我们来了解下,c语言给我们提供的一个重要工具malloc函数,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,如果要使用它,我们需要引入stdlib.h头文件。它的原型是:void * malloc (size_t __size),size_t是unsigned int类型。这个参数就是指定内存字节数,malloc函数就回去找到一个大小合适的块,如果找不到合适的块,那么将返回空指针,如果找到了,它会返回一个指针,指向这个内存的第一个字节的地址,我们看到它返回的指针类型并没有确定,所以我们可以将它赋值给任何的指针变量,只要给返回的指针指派适当的类型即可。

第三十章、分配内存函数malloc

在上例中我们还有个问题,malloc开辟了空间后,它在使用完毕后并不会自动销毁,如果用的多了,内存将会被分配完毕,因此,我们需要手动来释放malloc开辟的内存块,c语言提供了free函数,用来释放内存块,它的原型是:void free (void *__ptr),它的参数就是先前malloc返回的地址。

这里需要注意的是使用了free函数后需要手动将指针变量设置称空指针,要不然虽然那块内存被释放了,指针还是指向那里。

短短几行代码可以让你内存耗尽-C语言之malloc和free

C语言给予了程序员绝对的自由,这一点在malloc函数中体现的淋漓尽致。如果一个马虎的程序员在使用malloc函数,没有仔细甄别,那会十分容易导致整个计算机奔溃。

第三十章、分配内存函数malloc

如果你是C语言程序员请记住,无论在何处使用malloc申请了新的动态内存空间,都要主动释放free,程序绝对不会自动帮你做这件事情。

第三十章、分配内存函数malloc

第三十章、分配内存函数malloc

malloc函数负责向计算机申请确定大小的内存空间。 free函数负责释放malloc的申请空间。

(1)函数原型

void free(void *_Memory); void * malloc(size_t _Size)(2)头文件

stdlib.h(3)功能

malloc负责申请size_t _Size大小的内存空间,并且把所申请得到的内存空间首地址, 作为void*返回。用户往往必须把void*强制转换。 (注意:进程不会自动释放malloc申请的变量,无论是在主函数还是子函数,都不会) 正因为malloc申请内存不会自动释放,所以使用malloc必须配套free主动释放,否则申请 的内存空间将会一直存在到进程被结束。如果申请过多,会导致内存溢出(4)基础实例代码

char* ptc = (char*)malloc(30*sizeof(char)); int* pti = (int*)malloc(30*sizeof(int)); for(int i=0;i<30;++i) { printf("%d ",ptc[i]);//用来依次输出每个字符 } for(int i=0;i<30;++i) { printf("%d ",pti[i]); }p free(ptc); free(pti); (5)输出情况

(6)基础实例代码2:

char* ptc = (char*)malloc(30*sizeof(char)); int* pti = (int*)malloc(10*sizeof(int)); char a[]="zobol's Magic Cabin"; int b[10]={1,2,3,4,5,6,7,8,9,10}; strcpy(ptc,a);//字符串复制 memcpy(pti,b,10*sizeof(int)); //数组内存复制,注意第三个参数是以字节为单位 printf("%s\\n",ptc);//输出 for(int i=0;i<10;++i) { printf("%d ",pti[i]); }(7)输出情况:

(8)问题1:如果不用free释放malloc申请的内存,会发生什么事?回答:那你只需要很简短的代码就可以榨干你的电脑的内存。

for(int i=0;i<99999999;++i) { malloc(300000); }(9)如果不用指针接住malloc申请的内存空间的地址,会发生什么事情?回答:malloc已经向计算机申请了空间了,但是你没有保存返回的空间内存地址,那就等于白占用看计算机空间。

(10)在子函数内部malloc申请的空间,会不会随着子函数结束而释放?回答:不会!C语言给予了程序员绝对的自由,malloc申请的空间,除了程序员主动调用malloc以外,绝对不会被程序自动释放。

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/cjia/5839.html

十大经典排序算法(动态演示+代码)!干货收藏

C++内存篇-new与malloc区别详解

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部