前几天在练习顺序表,用malloc申请空间,今天看了别人的视频才发现malloc与free要成对使用,所以我想问忘记free的话程序结束会自动释放吗,还是会内存泄漏啊
如果只是做测试使用,没有关系的,因为程序结束后,自动就free释放了;
但实际应用中,可能出现多次的申请内存,如果申请的内存使用完后,没有及时释放,有可能导致后续申请内存失败,也有可能因为内存泄漏出现莫名的错误。
程序结束肯定会释放的
内存泄漏的前提是程序没有退出的情况下,由于不断申请内存但不释放,导致内存不足。
进程结束,会自动free
typedef struct Student
{
int ID;
int SCORE;
char SEX;
}Student;
void t2_struct()
{
// 栈 stack
struct Student s1 = {1001, 78, 'G'};
printf("ID = %d, Score = %d, Sex = %c\n", s1.ID, s1.SCORE, s1.SEX);
// 堆 heap
struct Student * s2 = (struct Student *)malloc(sizeof(struct Student));
s2->ID = 1002;
s2->SCORE = 99;
s2->SEX = 'G';
printf("ID = %d, Score = %d, Sex = %c\n", s2->ID, s2->SCORE, s2->SEX);
// 释放内存
if (s2 != NULL)
{
free(s2);
s2 = NULL;
}
}
void t3_struct_arr()
{
//栈区
Student s_stack[3];
// 堆区
int num = 3;
Student * ss = (Student *)malloc(sizeof(Student) * num);
ss[0].ID = 1002;
ss[0].SCORE = 99;
ss[0].SEX = 'G';
ss[1].ID = 1003;
ss[1].SCORE = 89;
ss[1].SEX = 'G';
ss[2].ID = 1004;
ss[2].SCORE = 99;
ss[2].SEX = 'G';
printf("ID = %d, Score = %d, Sex = %c\n", ss[0].ID, ss[0].SCORE, ss[0].SEX);
printf("ID = %d, Score = %d, Sex = %c\n", ss[1].ID, ss[1].SCORE, ss[1].SEX);
printf("ID = %d, Score = %d, Sex = %c\n", ss[2].ID, ss[2].SCORE, ss[2].SEX);
// 释放内存
if (ss != NULL)
{
free(ss);
ss = NULL;
}
}