赞
踩
malloc
calloc
realloc
free
原则:谁申请,谁释放,防止内存泄漏
#include<stdio.h> #include<stdlib.h> int mian() { int * p =NULL; p = malloc(sizeof(int)); if(p == NULL) { printf("malloc() error!\n"); exit(1); } *p = 10; printf("%d\n",*p); free(p); exit(0); }
#include<stdio.h> #include<stdlib.h> int mian() { in *p; int i; int num 5; p = malloc(sizeof(int)*num); for(i = 9;i< num;i++) scanf("%d",&p[i]); for(i = 0;i<num;i++) printf("%d ",p[i]); printf("\n"); exit(0); }
在C语言中,当你传递一个指针给一个函数时,你实际上是传递了指针的副本,而不是指针本身。这意味着,虽然你在函数内部可以通过这个指针修改指向的内存,但对于指针本身的修改(例如将它指向一个新的内存地址),这种修改不会影响到函数外部指针的值。
#include <stdio.h> #include <stdlib.h> void func(int *p) { // 修改指针指向的内容 *p = 42; // 修改指针本身的值(只会影响到函数内部的指针) p = NULL; } int main() { int x = 0; int *p = &x; printf("Before: %d\n", *p); // 输出: 0 func(p); printf("After: %d\n", *p); // 输出: 42 return 0; }
#include<stdio.h> #include<stdlib.h> void func(int *p,int n) { p = malloc(n); if(p == NULL) exit(1); return ; } int main() { int *p =NULL; printf("%d",&p); int num = 100; func(p,num); free(p); exit(0); }
#include<stdio.h> #include<stdlib.h> void func(int **p,int n) { *p = malloc(n); if(p == NULL) exit(1); return ; } int main() { int *p =NULL; printf("%d",&p); int num = 100; func(&p,num); free(p); exit(0); }
#include<stdio.h> #include<stdlib.h> void *func(int *p,int n) { p = malloc(n); if(p == NULL) exit(1); return p; } int main() { int *p =NULL; printf("%d",&p); int num = 100; p = func(p,num); free(p); exit(0); }
#include <stdio.h> #include <stdlib.h> int main() { int *arr; int n = 5; arr = (int*)malloc(n * sizeof(int)); if (arr == NULL) { printf("Memory allocation failed\n"); return 1; } for (int i = 0; i < n; i++) { arr[i] = i + 1; } for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); free(arr); return 0; }
易错点:
忘记检查malloc返回值是否为NULL,从而导致程序在内存分配失败时崩溃。
忘记释放使用malloc分配的内存,导致内存泄漏。
#include <stdio.h> #include <stdlib.h> int main() { int *arr; int n = 5; arr = (int*)calloc(n, sizeof(int)); if (arr == NULL) { printf("Memory allocation failed\n"); return 1; } for (int i = 0; i < n; i++) { printf("%d ", arr[i]); // 初始化为0 } printf("\n"); free(arr); return 0; }
易错点:
忘记检查calloc返回值是否为NULL。
忘记释放使用calloc分配的内存,导致内存泄漏。
#include <stdio.h> #include <stdlib.h> int main() { int *arr; int n = 5; arr = (int*)malloc(n * sizeof(int)); if (arr == NULL) { printf("Memory allocation failed\n"); return 1; } for (int i = 0; i < n; i++) { arr[i] = i + 1; } n = 10; arr = (int*)realloc(arr, n * sizeof(int)); if (arr == NULL) { printf("Memory reallocation failed\n"); return 1; } for (int i = 5; i < n; i++) { arr[i] = i + 1; } for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); free(arr); return 0; }
易错点:
忘记检查realloc返回值是否为NULL。
直接将realloc的返回值赋给原指针,如果realloc失败,原指针会丢失,导致内存泄漏。正确的方法是使用一个临时指针来接收realloc的返回值。
#include <stdio.h> #include <stdlib.h> int main() { int *arr = (int*)malloc(5 * sizeof(int)); if (arr == NULL) { printf("Memory allocation failed\n"); return 1; } // 使用内存 free(arr); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。