malloc和free

简介: /* ============================================================================ Name : TestMemory.
/*
 ============================================================================
 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;
}

相关文章
|
6天前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别
pymalloc 和系统的 malloc 有什么区别
|
2天前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别?
pymalloc 和系统的 malloc 有什么区别?
|
30天前
|
程序员 编译器 C语言
C中的 malloc 和C++中的 new 有什么区别
在C语言中,`malloc`函数用于在运行时分配内存,返回指向所分配内存的指针,需显式包含头文件 `&lt;stdlib.h&gt;`。而在C++中,`new`不仅分配内存,还对其进行构造初始化,且直接使用类型声明即可,无需额外包含头文件。`new`还支持数组初始化,能更好地融入C++的面向对象特性,而`malloc`仅作为内存分配工具。使用完毕后,`free`和`delete`分别用于释放`malloc`和`new`分配的内存。
50 21
|
5月前
|
存储 C语言
malloc
【6月更文挑战第16天】
60 8
|
5月前
|
存储 C语言
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
257 1
|
5月前
|
C语言
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
62 0
|
5月前
|
程序员 C语言
C语言内存管理:malloc、calloc、realloc与free函数详解
C语言内存管理:malloc、calloc、realloc与free函数详解
149 0
|
6月前
|
存储 安全 编译器
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
63 0
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
|
5月前
|
缓存 C语言
glibc函数malloc的工作原理
glibc函数malloc的工作原理
40 0
|
6月前
|
程序员 编译器 C语言
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(下)
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free
42 0
C语言进阶⑰(动态内存管理)四个动态内存函数+动态通讯录+柔性数组_malloc+free(下)