#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);
<span style="white-space:pre"> </span>free(p);
p = NULL;
return 0;
}
unit_t *p = malloc(sizeof(unit_t));这一句,等号右边是void *类型,等号左边 是unit_t *类型,编译器会做隐式类型转换,我们讲过void *类型和任何指针类型之间可 以相互隐式转换。
虽然内存耗尽是很不常见的错误,但写程序要规范,malloc之后应该判断是否成功。以后 要学习的大部分系统函数都有成功的返回值和失败的返回值,每次调用系统函数都应该判 断是否成功。