Chapter6.h
#ifndef __CHAPTER_6_ #define __CHAPTER_6_ /*《深入理解C指针》学习笔记 -- 第六章*/ typedef struct __person { char* name; char* title; unsigned int age; }person; /*结构体内存的释放问题*/ void __struct_memory_test(); #endif
Chapter6.cpp
#include "Chapter6.h" #include <stdio.h> #include <malloc.h> #include <string.h> /*结构体内存的释放问题*/ /*对于结构体内存在指针的情况,我们须要注意如何正确的使用这个结构体*/ void __struct_memory_test() { /*第一种使用结构体的方式*/ person ps; /*须要为结构体内的指针分配内存才干存储值*/ ps.name = (char*)malloc(sizeof(char) * 16); strcpy(ps.name, "DLUTBruceZhang"); ps.title = (char*)malloc(sizeof(char) * 10); strcpy(ps.title, "DLUT"); ps.age = 24; /*使用完之后须要释放结构体指针的内存*/ free(ps.name); free(ps.title); /*另外一种使用结构体的方式*/ person* ps2; /* 首先,须要为结构体申请内存,可是这里须要注意的是,仅仅是为这个结构体申请 内存。结构体内的其它指针须要另外申请别的内存 */ ps2 = (person*)malloc(sizeof(person)); /*须要为结构体内的指针分配内存才干存储值*/ ps2->name = (char*)malloc(sizeof(char) * 16); strcpy(ps2->name, "DLUTBruceZhang"); ps2->title = (char*)malloc(sizeof(char) * 10); strcpy(ps2->title, "DLUT"); ps2->age = 24; /* 使用完内存后须要释放掉,这里须要注意的是释放内存的顺序 首先应该释放结构体内指针指向的内存,这里是没有先后顺序的, 可是。释放整个结构体的内存一定是最后一步 */ free(ps2->name); free(ps2->title); free(ps2); }