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.柔性數組具體搜: