定义结构体
typedef{ char *aa; int num } TEST;
分配内存:
TEST *qtest;
qtest=(TEST *)malloc(10*sizeof(TEST));
结构体中变量aa分配内存
for(i=0;i<10;i++)
{qtest[i].aa=malloc(100); strcpy(qtest[i].aa,"jdjdjdjd");}
现在释放内存
free(qtest);
结果通过printf实验内存释放情况:
for(i=0;i<10;i++)
{printf ("qtest=%s",qtest[i].aa}
结果:
只有qtest[0]被释放了,qtest[1]-qtest[9]内存中的内容没发生改变。
请问如何彻底的释放全部qtest 谢谢
释放内存的意思是标记这些内存为没有被使用,而不是说对释放的内存区域清零。所以你看到这些内存内容没有改变是正常的,不等于没有释放。
malloc与free应是成对出现的,有malloc的地方就要有free,你的程序中只有free(qtest)却没有free(qtest[i],aa)。正确的做法应该是:
for(i=0;i<10;i++)
{
free(qtest[i].aa);
qtest[i].aa=NULL;
}
free(qtest);
qtest=NULL;
释放是为了防止野指针的出现,你只释放指针集合的头指针,剩下的找是找不到了,但是还存在,并且成为野指针。所以必须用循环释放所有的