1.malloc函数可以开辟一块空间,具体搜:
2.malloc函数申请的空间在内存的堆区
而且它只负责帮你申请空间,不负责帮你清理空间
3.free函数可以释放内存
4.free函数释放的是内存中的堆区,具体搜:
5.在free函数调用完后记得把对应的指针设为空指针
6.calloc函数跟malloc函数差不多,但它会为内部的空间赋值0,具体搜:
7.realloc函数可以开辟空间,具体搜
8.realloc函数开辟空间的操作都是在malloc等函数实现开辟好的空间里边运行的
9.realloc函数开辟空间的两种情况搜
10.realloc(NULL,40)与malloc函数一样,因为没得调整空间,那就只能开辟空间
11.malloc,calloc,realloc函数申请的空间,出了作用域是不会主动销毁的
除了使用free函数和程序结束,他们申请的空间都不会主动释放
12.不能对非动态开辟的内存使用free函数
13.不能使用free函数释放一块动态开辟内存的一部分
14.不能对同一块动态开辟内存多次释放
15.动态开辟内存不要忘记释放(否则会导致内存泄漏)
16.对于
int* test()
{
int* p = (int*)malloc(100);
if (p == NULL)
{
return;
}
*p = 10;
return 0;
}
函数而言,p仍然是局部变量
在调用完函数后,像上述的函数在调用完后,由于p没了,所以malloc函数所申请的那部分空间就没办法释放了,所以就发生了内存泄漏
17.字符串能直接这样打印
18.传值调用和传址调用的一个特殊例子搜
19.对函数
char* ggg()
{
char p[ ] = { "123456789" };
return p;
}
这里边的p[ ]里边的内容在出了函数后会自动销毁
20.一定要记得释放动态内存
21.使用野指针 可能 会报错
22.结
23.非法访问的一个特殊案例搜
24.柔性数组具体搜: