C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?

翻译 2017年07月15日 14:24:33
C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?


问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的。


问题2:给结构体变量分配之后,是否还要给每个成员分配,还是只给不能确定大小的成员分配?


问题3:如果是要每个成员分配内存,那么释放的时候是不是每个成员都要单独释放?指针加一之后,又怎么做?



C\C++中结构体变量与结构体指针内存分配问题?


(1)声明一个结构体变量,无论是否初始化,都开辟内存,声明一个结构体指针变量,对其初始化的时候才会开辟内存。


(2)结构体变量分配结构体本身大小的空间,结构体指针分配4个字节,其实任何类型的指针都是分配四个字节的指针空间。


(3)所以:
     A a[3]; //a里面是三个A变量,所以分配三个结构体大小
     A *a;  //a是一个指针,分配4个字节,就算A再大,a也只是4个字节,因为任何类型的指针都是4个字节。要使用a,必须先要对指针初始化,也即分配空间了。
     如:
     A *a;
     a = (A*)malloc(sizeof(A));


(4)我们完全可以撇开结构体,把问题简单化成int类型来说明这个指针问题:
int a1[10];
int *a2;


1)a1是包含10个int的数组,大小也就是10*sizeof(int)。直接使用a1不要在进行什么初始化或者分配空间的游戏,因为数组a1里面本身存放的就是int变量本身了。


2)a2是一个int*的东西,也就是整型指针,a2不能存放int变量,它只能存放一个int变量的地址。如果要使用a2,必须首先对a2初始化,即将它指向一个int变量的地址,如:a2 = (int*)malloc(sizeof(int));
或者
int i = 10;
a2 = &i;
所以,malloc函数的作用是首先声明一个变量,然后返回该变量的地址。
所以:a2 = (int*)malloc(sizeof(int)) 的含义就是把该变量的地址赋值给a2,和a = &i 本质上并没有什么不同,只是一个变量是栈上,一个是堆上,都是一个地址赋值。


(5)所以,所谓的分配空间,就是对指针赋值,把一个变量的地址赋值给一个指针。

Android系统信息获取 之六:网络连接状态信息获取

Android系统信息获取 之六:网络连接信息获取 Android系统可以通过WIFI和移动网络来连接互联网,系统网络连接状态是通过ConnectivityManager 类来获取的。关键代码如...
  • netwalk
  • netwalk
  • 2013年08月07日 13:35
  • 6517

Android内存泄露分析简要思路

工作中遇到挺多需要分析内存泄露问题的情况,现在大致简要写下思路,等之后时间相对比较充裕再进行补充。1.明白内存泄露的判断依据?个人总结为:持续增加,只增不减!理解一下这8个字,配合几个命令和工具来确定...

C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?

C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?...

c/c++实现的一个动态分配内存的结构体数组(类似vector)

这个数组可以向里面插入任何类型,包括自定义类型, 程序只是实现了基本功能,还有待完善, 下面是全部代码: #include #include #include #include #includ...
  • ygqwan
  • ygqwan
  • 2013年08月01日 01:37
  • 6404

【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明

【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明标签:【VS开发】 【编程开发】 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性。...

C语言结构体成员内存分配

C语言中结构体内存分配曾经把我迷惑了好一阵子,确切说可以说是结构体对象所占用的空间判断让我迷惑了一阵子。把我之前探索的过程记录下来,做一下简单的学习总结。在此之前,我已经了解到了一点基本的信息,也就是...

结构体指针内的指针变量成员的内存分配

但凡有指针的内存分配,都必须为每个指针变量单独分配内存空间!

C语言好难——结构体的内存分配

结构体的内存分配,我个人是觉得比较蛋疼的,它有一个需要遵循的原则,地址对齐,也有人称为内存对齐,叫法没关系,反正我只是“拿来”,会用就行。        好了,先有这么一个概念,什么是内存对齐,先丢一...
  • ma57457
  • ma57457
  • 2016年10月09日 23:30
  • 544

Delphi 的内存操作函数(3): 给结构体指针分配内存

使用结构或结构数组, 一般是不需要主动分配内存的, 譬如: var   pts: TPoint; begin   pts.X := 1;   pts.Y := 2;   ShowMes...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
举报原因:
原因补充:

(最多只允许输入30个字)