#include <stdio.h>
#include <malloc.h>
//测试free()函数是否会释放结构体指针里的指针指向的内存地址?
// 答案是: 不会,free()只会将该结构指针所拥有的内存释放,但是,
// 在不把该结构体指针置为NULL前,该结构体里的指针还是可以访问所指向的内存地址的。
// 所以,使用free()释放内存后,必须把指针置为NULL.
typedef struct _Node
{
int data;
struct _Node* prev;
struct _Node* next;
}NODE,*PNODE;
int main()
{
NODE* nd = (NODE*)malloc(sizeof(NODE));
NODE* nd2 = (NODE*)malloc(sizeof(NODE));
nd->data = 10;
nd->prev = nd2;
nd->next = nd2;
nd2->data = 11;
nd2->prev = nd;
nd2->next = nd;
printf("nd Address = %p\t nd value = %d\n", nd, nd->data);
printf("nd2 Address = %p\t nd2 value = %d\n", nd2, nd2->data);
printf("nd->prev Address = %p\t nd->next = %p\n", nd->prev, nd->next);
printf("nd2->prev Address = %p\t nd2->next = %p\n", nd2->prev, nd2->next);
// free(nd->prev);
// free(nd->next);
free(nd);
printf("nd->next %p \n",nd->next);
// 在没有把该指针置为NULL前,是可以访问已经被free()释放内存
// 的结构体里的指针所指向的内存地址。
nd = NULL;
//printf("nd->next %p \n",nd->next); 非法访问内存
printf("nd2 Address = %p\t nd2 value = %d\n", nd2, nd2->data);
free(nd2);
nd2 = NULL;
//printf("nd2->prev Address = %p\t nd2->next = %p\n", nd2->prev, nd2->next);
return 0;
}