面试题答案
一键面试分析可能导致内存泄漏的地方:
- 当执行
ptr1 = (int *)malloc(20 * sizeof(int));
时,原本ptr1
指向的由malloc(5 * sizeof(int))
分配的内存没有释放,导致内存泄漏。
修改后的代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr1 = (int *)malloc(5 * sizeof(int));
if (ptr1 == NULL) {
return 1;
}
int *ptr2 = (int *)malloc(10 * sizeof(int));
if (ptr2 == NULL) {
free(ptr1);
return 1;
}
// 在此处添加一些对ptr1和ptr2的操作
int *temp = ptr1;
ptr1 = (int *)malloc(20 * sizeof(int));
if (ptr1 == NULL) {
free(ptr2);
free(temp);
return 1;
}
free(temp);
// 更多操作
free(ptr1);
free(ptr2);
return 0;
}
在上述修改后的代码中,使用临时变量 temp
保存 ptr1
原来的地址,在重新分配 ptr1
内存后,先释放 temp
指向的内存,在程序结束前也分别释放 ptr1
和 ptr2
指向的内存,从而避免内存泄漏。