在项目开发中遇到一些问题:
1)指针的分配的形式和释放的形式不一样,会不会造成内存泄漏,也就是没有释放?
2)释放了内存后,继续访问该指针所指向的内存会不会出错?
对于第一种情况,场景是这样的。定义一个结构体,并分配若干个该结构体内存空间,地址交给一个char*指针。在释放的时候,分别对char*指针和结构体指针进行free,是否有区别?释放了后,是否可以访问?
#include <stdio.h>
#include <malloc.h>
typedef struct _FUCK
{
int a;
int b;
} FUCK;
void Init_Memory(char *p)
{
FUCK *fuck = NULL;
fuck = (FUCK*)p;
fuck[0].a = 1;
fuck[0].b = 2;
fuck[1].a = 3;
fuck[1].b = 4;
fuck[2].a = 5;
fuck[2].b = 6;
}
char* Get_Memory(int size)
{
char* p = NULL;
p = (char*)malloc(size);
Init_Memory(p);
return p;
}
void Display_Mem(FUCK* fuck)
{
//FUCK* fuck = (FUCK*)p;
printf("1 | a[%d], b[%d]\n", fuck[0].a, fuck[0].b);
printf("2 | a[%d], b[%d]\n", fuck[1].a, fuck[1].b);
printf("3 | a[%d], b[%d]\n", fuck[2].a, fuck[2].b);
}
void Display_Mem_Char(char* p)
{
FUCK* fuck = (FUCK*)p;
printf("1 | a[%d], b[%d]\n", fuck[0].a, fuck[0].b);
printf("2 | a[%d], b[%d]\n", fuck[1].a, fuck[1].b);
printf("3 | a[%d], b[%d]\n", fuck[2].a, fuck[2].b);
}
int main(void)
{
int size = 0;
char *p = NULL;
FUCK* fuck = NULL;
char *q = NULL;
char *bitch = NULL;
//test for un-local free
//分配内存大小
size = sizeof(FUCK) * 3;
//分配内存