C语言动态内存分配与自定义函数实现

动态内存分配malloc,relloc,free等函数,在main函数中能实现分配,扩展与释放,但在,独立的自定义函数中用malloc函数来分配后在main函数中吊用,在这过程中地址的的传递该怎么作,试了很久怎么就不成功呢?请各位多多指教。

根据使用函数不同,作用各不相同。共同点均是动态分配一段内存,使用后需要用free函数释放。所有动态分配函数均声明在stdlib.h中。

1 malloc
void *malloc(unsigned int num_bytes);
功能
分配长度为num_bytes字节的内存块

返回值
如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。

说明
关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。

2 calloc
void *calloc(size_t n, size_t size);
在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。

3 realloc
void *realloc(void *mem_address, unsigned int newsize);
功能
先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。

返回值
如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。

注意
当内存不再使用时,应使用free()函数将内存块释放。
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-15

传参数的时候 传struct info **p

然后赋值*p

void change(struct info **p)
{
    *p = (struct info *)malloc(sizeof(struct info));
    (*p)->num=300;
}

调用

change(&p);

追问

谢谢回答,
真的很感谢谢,
其实,并非卡在如何使用动态内存分配的系统函数,
只是对于函数的二级指针,一会儿懵懂,一会懵逼的。。。
还是基本功太差,目前一直自学,苦于没有良师。
谢谢指教

本回答被提问者采纳

C语言内存管理机制--malloc\/calloc\/free原理与实现
malloc函数用于在系统中动态分配连续的可用内存。它要求内存大小至少为指定的字节数,返回指向内存块起始地址的指针,多次调用不重叠分配地址,实现内存分配和释放。malloc函数的返回值总是字节对齐,适合高效访问C语言数据结构。五、初探实现malloc 一个简单实现的malloc函数直接从未映射区域划出内存,但忽略了记...

C语言:动态内存函数:malloc的使用详解
malloc函数用于动态内存分配,其基本使用语法是:size_t malloc(size_t size);这里的size_t是一个无符号整型,代表你需要的内存空间大小,以字节为单位。malloc函数会返回一个void*类型的指针,指向分配到的内存起始位置。返回void*的原因在于函数并不知道将分配的内存用于何种数据类型,因此需要用户自行...

C语言(六):动态内存管理
动态内存管理在C语言中扮演着关键角色,它允许程序在运行时动态地分配和释放内存空间,以适应程序的动态需求。这是通过使用一系列标准库函数来实现的,这些函数位于stdlib.h头文件中。以下是这些关键函数的简要介绍:首先,我们有malloc()函数。它允许用户请求分配一定大小的内存空间。例如,为了声明一个整型...

c语言中malloc函数的用法
c语言中malloc函数的用法是动态内存分配函数。malloc函数是C语言中的一种动态内存分配函数。它可以在程序运行时动态地分配内存空间,使程序具有更大的灵活性和可扩展性。使用malloc函数可以在程序运行时动态地分配内存空间。例如,下面的代码片段可以申请一个大小为10个整形变量大小(即40个字节)的连续内存空间...

【C】动态内存管理 malloc calloc relloc free 函数详解
C语言还提供了一个函数叫 calloc,calloc函数也用来动态内存分配。原型如下:示例:调试结果如图,可以理解为calloc = malloc+(memset将开辟的空间初始化为0)。如果我们对申请的内存空间的内容要求初始化,那么可以很方便的使用calloc函数来完成任务。2.3 realloc 函数原型如下:情况1 当是情况1 的时候,...

C语言关于MALLOC的用法
未能正确释放已不再使用的内存空间。当程序中存在大量未释放的内存空间时,会逐渐消耗系统的可用内存,最终导致程序运行缓慢或崩溃。总之,malloc是C语言中实现动态内存分配的工具,它允许程序根据需要灵活地分配和释放内存空间。正确使用malloc和free函数可以有效管理内存,提高程序的性能和稳定性。

C语言中的动态内存分配的用法举例
1、malloc函数:其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。2、free函数:由于内存区域总是有限的,不能不限制地分配下去,而且一个程序要尽量节省资源,所以当所分配的内存区域不用时,就要释放它,...

动态内存分配详解——C语言
动态内存分配是C语言中处理内存空间的关键,它解决了固定空间浪费或不足的问题。动态内存管理旨在提供灵活的内存分配和释放,以适应程序运行时的需求。主要的动态内存管理函数有malloc()和free()。malloc()用于动态申请内存,其原型在stdlib.h头文件中。free()用于释放先前动态申请的内存,如果不主动释放,...

C语言-动态分配内存 malloc & free
在一个函数中动态分配的内存,在另一个函数中操作这块内存 (1) MM是一个系统级的东西,所有的应用程序都向同一个MM申请内存。(2) 何为借出?实际上,在内存被借出时,MM只是把它管理的内存标记了一下,表示该段内存已经被占用。比如,它把每一段被占用的内存给记录下来(首地址,长度) (p0,n...

C语言malloc与free函数的用法
定义了结构stu,定义了stu类型指针变量ps。然后分配一块stu大内存区,并把首地址赋予ps,使ps指向该区域。再以ps为指向结构的指针变量对各成员赋值,并用printf输出各成员值。最后用free函数释放ps指向的内存空间。整个程序包含了申请内存空间、使用内存空间、释放内存空间三个步骤,实现存储空间的动态分配...

相似回答