malloc和free

来源:互联网 发布:阿里云个人网站备案 编辑:程序博客网 时间:2024/06/05 03:05
/* ============================================================================ Name        : TestMemory.c Author      : lf Version     : Copyright   : Your copyright notice Description : malloc和free   注意细节: void * malloc (size_t size)   因为malloc函数并不知道用户获取到这块数据后存放什么类型的数据,所以返回一个通用指针void *.   用户可以将其转换成需要的类型的指针再使用.其实,void *可以和任何指针类型之间相互隐式转换. ============================================================================ */#include <stdio.h>#include <stdlib.h>#include <string.h>void testMemory();typedef struct {char *name;int number;} student;int main(void) {testMemory();return EXIT_SUCCESS;}/** * 1 malloc和free成对出现 * 2 在free(p)之后,再执行p=NULL *   因为free(p)只是归还了p所指向的内存地址但是没有改变p的值,即p现在所指向的内存 *   已经不属于本用户了即p成为了野指针,所以为了避免这种情况再手动执行p=NULL * 3 要先用malloc给给stu->name分配空间再执行strcpy *   否则可能覆盖name指向的地址的数据造成段错误 * 4 要先释放stu->name再释放stu,否则造成stu->name *   变成野指针无法回收其指向的内存 */void testMemory() {student *stu = malloc(sizeof(student));if (stu == NULL) {printf("OOM\n");exit(1);}stu->number = 9527;stu->name = malloc(20);//strcpy(stu->name, "xiao ming");printf("stu->number=%d,stu->name=%s\n", stu->number, stu->name);free(stu->name);free(stu);stu=NULL;}

0 0
原创粉丝点击