malloc和free的一个简单例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int number;
char *msg;
} unit_t;
int main(void)
{
unit_t *p = malloc(sizeof(unit_t));
if (p == NULL) {
printf("out of memory\n");
exit(1);
}
p->number = 3;
p->msg = malloc(20);
strcpy(p->msg, "Hello world!");
printf("number: %d\nmsg: %s\n", p->number, p-
>msg);
free(p->msg);
free(p);
p = NULL;
return 0;
}
关于这个程序要注意以下几点:
unit_t *p = malloc(sizeof(unit_t)); 这一句,等号右边是 void * 类型,等号左边
是 unit_t * 类型,编译器会做隐式类型转换,我们讲过 void * 类型和任何指针类型之间可
以相互隐式转换。
虽然内存耗尽是很不常见的错误,但写程序要规范, malloc 之后应该判断是否成功。以后
要学习的大部分系统函数都有成功的返回值和失败的返回值,每次调用系统函数都应该判
断是否成功。
free(p); 之后, p 所指的内存空间是归还了,但是 p 的值并没有变,因为从 free 的函数接口
来看根本就没法改变 p 的值,