郝斌版《数据结构》学习笔记
时间:2015.08.31 - 2015.09.05
动态内存的分配与释放
动态构造一维数组
假设动态构造一个int型数组
int *p = (int *)malloc(int len);
1、malloc只有一个int型的形参,表示要求系统分配的字节数
2、malloc函数的功能是请求系统len个字节的内存空间,如果请求失败,则返回第一个字节的地址,如果分配不成功,则返回NULL。
# include <stdio.h>
# include <malloc.h>
int main(void)
{
int a[5] = {4, 10, 2, 8, 6};
int len;
printf("请输入你需要分配的数组的长度:len = ");
scanf("%d", &len); //用户输入长度,动态生成len长度的数组
int * pArr = (int *)malloc(sizeof(int) * len); //4 * 5, 20个字节的空间 ,c/c++中使用malloc()动态分配的内存必须使用free()来释放,不会执行自动回收,造成内存泄露,不像java可以自动回收。
// *pArr = 4; //类似于a[0] = 4;
// pArr[1] = 10; //类似于a[1] = 10;
// printf("%d %d", *pArr, pArr[1]);
printf("请输入对应数组个数的元素:\n");
//我们可以把pArr当作一个普通的数组来使用
for(int i=0; i<len; ++i)
scanf("%d", &pArr[i]);
//int不能重复声明,java中可以
for(i=0; i<len; ++i)
printf("%d\n", *(pArr+i));
free(pArr); //把pArr所代表的动态分配的20个字节的内存释放
return 0;
}
跨函数使用内存通过动态malloc来实现。
# include <stdio.h>
# include <malloc.h>
struct Student
{
int sid;
int age;
}
struct Student * CreateStudent(void); //有一个error
void ShowStudent(struct Student *);
int main(void)
{
struct Student *ps;
ps = CreateStudent();
ShowStudent(ps);
return 0;
}
void ShowStudent(struct Student *pst)
{
printf("%d %d\n", pst->sid, pst->age);
}
struct Student * CreateStudent(void)
{
struct Student * p = (struct Student *)malloc(sizeof(struct Student));
p->sid = 99;
p->age = 88;
return p;
}