C和指针之动态内存分配malloc、calloc、realloc简单使用和区别
生活随笔
收集整理的這篇文章主要介紹了
C和指针之动态内存分配malloc、calloc、realloc简单使用和区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、介紹
3個函數都在<stdlib.h>頭文件 1)、void* malloc(unsigned size); 在內存的動態存儲區中分配一塊長度為size字節的連續區域,參數size為需要內存空間的長度,返回該區域的首地址,這里我們需要主要如果申請失敗返回空指針 2)、void* realloc(void* ptr, unsigned newsize);?? 給一個已經分配了地址的指針重新分配空間,參數ptr為原有的空間地址,newsize是重新申請的地址長度,地址可能會變 3)、void* calloc(size_t numElements, size_t sizeOfElement);? 參數sizeOfElement為申請地址的單位元素長度,numElements為元素個數,即在內存中申請numElements*sizeOfElement字節大小的連續地址空間 會將所分配的內存空間中的每一位都初始化為零,也就是說,如果你是為字符類型或整數類型的元素分配內存,那么這些元素將保證會被初始化為0 用完要記得釋放內存 free(p); p = NULL; 都在堆區分配內存,用完都需要釋放,都是連續的分配內存2、測試Demo
3個函數簡單使用 #include <stdio.h> #include <stdlib.h>//malloc、realloc、calloc簡單使用int main() {int *p1 = NULL;p1 = malloc(10 * sizeof(int));if (p1 != NULL){//給p1賦值for (int i = 0; i < 10; ++i){*(p1 + i) = 5;}//打印值for (int i = 0; i < 10; ++i){printf("p1[%d] is %d\n", i, p1[i]);}free(p1);p1 = NULL;}int *p2 = NULL;p2 = calloc(5, sizeof(int));if (p2 != NULL){for (int i = 0; i < 5; i++){printf("p2[%d] is %d\n", i, p2[i]);}free(p2);p2 = NULL;}char *p3, *q4;p3 = (char *)malloc(5);q4 = p3;p3 = (char *)realloc(p3, 10)if (p3 != NULL){printf("p3 is %p\n", p3);printf("q3 is %p\n", q4);p3 = (char *)realloc(p3, 1000);printf("p3 is %p\n", p3);free(p3);p3 = NULL;}return 0; }?
?
?
3、 運行結果
1111deMacBook-Pro:malloc a1111$ vim malloc.c 1111deMacBook-Pro:malloc a1111$ gcc -g malloc.c -o malloc 1111deMacBook-Pro:malloc a1111$ ./malloc p1[0] is 5 p1[1] is 5 p1[2] is 5 p1[3] is 5 p1[4] is 5 p1[5] is 5 p1[6] is 5 p1[7] is 5 p1[8] is 5 p1[9] is 5 p2[0] is 0 p2[1] is 0 p2[2] is 0 p2[3] is 0 p2[4] is 0 p3 is 0x7ff323c01020 q3 is 0x7ff323c01020 p3 is 0x7ff323c03260總結
以上是生活随笔為你收集整理的C和指针之动态内存分配malloc、calloc、realloc简单使用和区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse运行项目报Could no
- 下一篇: C和指针之动态内存分配之输入很多整数进行