浅谈malloc的用法!

malloc是动态内存分配时最长用到的函数之一,是在堆(heap)上来申请一段连续的内存,用来计算你要申请分配的内存大小。

以int类型来举例,常见格式为:int *p=(int *)malloc(40);

如果与sizeof结合起来可以这样写:int *p=(int *)malloc(10*sizeof(int));

malloc函数所需的头文件为malloc.h或stdlib.h,返回值为void*类型,当其返回为void时证明内存申请失败,而它可申请的最大内存一般不会超过2G,但也会因电脑而异。申请完之后应进行断言,看内存在堆上申请是否成功,如果申请成功编译器会返回所申请的内存大小。

使用完这块内存之后应该进行手动释放,释放时需用到free函数

free(p); //不释放会导致内存泄漏  检测内存泄漏时应该加入vld.h头文件

p=NULL; //不置空可能会出现野指针

申请内存的时候,部分人可能会使用了malloc也释放了也置空了,但是运行的时候往往会出bug。

申请一般情况下语句写好是没有问题的,所以问题一般都出释放(free)上。

free()崩溃的原因主要有:

①指针进行移动    如果指针进行转移,比如p++了或者p--了,都会崩溃

②重复释放同一块内存   这个比较好理解 如果同一块内存释放两次及以上都会崩溃。

③越界  访问超过你所申请的内存大小会崩溃

④释放不是动态申请的内存 如果你将*p指向一个变量或任何非动态申请的内存,都会崩溃。

与malloc相关的函数主要有:

calloc()  默认值为0  用法与malloc相同

realloc() 默认值为随机值 用法: int *p2 = (int *)realloc(p,15*sizeof(int))

                                                    assert(p2 != NULL);

                                                     free(p2);

                                                     p2=NULL;

猜你喜欢

转载自blog.csdn.net/Disremembrance/article/details/81169014