关于结构体动态分配内存的问题

C语言 码拜 8年前 (2016-04-08) 1405次浏览
如下初始化一个栈;
}

typedef struct STACK
{
	int *arr;//数组
	int cap;//容量
	int top;//栈顶元素
	int size;//当前元素个数
} Stack;
void init_stack(Stack **stack, int cap)
{
	*stack = (Stack*)malloc(cap*sizeof(int));
	(*stack)->arr = (int*)malloc(cap*sizeof(int));
	(*stack)->cap = cap;
	(*stack)->size = 0;
	(*stack)->top = 0;
}

*stack为该结构体的指针,理论上该结构体所占的空间要比结构体中任何一个元素所占的空间都要大。因此,*stack=(Stack*)malloc(这里该怎么写?)。
本人按照上面的来写为什么不会出错?
对于二维数组*arr很容易理解为{{1},{2}…},指向第一组元素的的地址,结构体*stack是不是也是指向的第一个元素的地址。
越来越搞不懂了。结构体中为什么还有对齐什么的

解决方案

40

这样才对:

*stack = (Stack*)malloc(sizeof(Stack));

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于结构体动态分配内存的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)