数据结构 - 内存

来源:互联网 发布:软件原型设计 编辑:程序博客网 时间:2024/06/06 03:41
郝斌版《数据结构》学习笔记
时间: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;
}
0 0
原创粉丝点击