关于栈初始化的二级指针使用问题

关于栈初始化的二级指针使用问题
先附上代码

#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 20
typedef struct bitnode{
	char zt;
	struct bitnode *lchild;
	struct bitnode *rchild;
}Bitnode,*bitree;
typedef struct{//栈结构定义
	bitree *base;
	bitree *top;
	int stacksize;
}SqStack;
int InitStack(SqStack *S){
	//构造一个空栈S
	S->base=(bitree *)malloc(STACK_INIT_SIZE*sizeof(bitree));
	if(!S->base)//分配失败
	{
		printf("分配内存失败.\n");
		exit(0);
	}
	(S->base[0])=malloc(sizeof(Bitnode));
	S->base[0]->zt=10;
	printf("%d\n",(S->base[0])->zt);
	//S->top=S->base;
	//S->stacksize=STACK_INIT_SIZE;
	return 1;
}
 
int main()
{
	SqStack *t=malloc(sizeof(SqStack));
	InitStack(t);
	return 0;
}

先附上初始化栈的C语言测试代码。
首先根据SqStack *t=malloc(sizeof(SqStack));
这一句代码,创建了一个SqStack结构体类型的指针并为其开辟空间(初始化)
见图1。
图1
由上图可知,t是一个SqStack类型的指针,它指向了一个SqStack结构体a。
结构体a里面存放了一个二级指针base和一个二级指针top。

bitree *base;
bitree *top;

bitree定义的是一个指向bitnode类型的指针,而bitree *base即为二级指针。

S->base=(bitree *)malloc(STACK_INIT_SIZE*sizeof(bitree));

由上面的代码可以知道,此句代码为base开辟了20个bitree类型的空间。
在这里插入图片描述
没加下面这句代码的时候

(S->base[0])=malloc(sizeof(Bitnode));

我用下面这一行代码进行访问发现总是出现段错误的问题,因此使我发现了虽然为一级指针数组开辟了空间,但其中存放的是指针,而指针去指向一个节点仍需要为其开辟空间。这一个问题是我在应用中经常会忽视的。

(S->base[0])->zt=10;

在加入(S->base[0])=malloc(sizeof(Bitnode));这句代码之后,空间分配见下图
在这里插入图片描述
这时候我们可以通过指针数组中的一级指针对bitnode节点进行访问。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值