湘南第一刀 2020-08-13 21:21 采纳率: 100%
浏览 100
已采纳

最近在学习数据结构,自己编写了一个栈,运行是时访问top指针指向数据时老是出现段错误。

源码如下:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 20
#define STACK_INCREAMENT_SIZE 10
typedef char ElemType;
typedef struct {
    ElemType *base;
    ElemType *top;
    int stack_size;
}STACK,*STACK_PTR;
void init_stack(STACK *s)
{   
    s = (STACK_PTR)malloc(sizeof(STACK));//写了结构体指针,需要分配一个结构体内存才能使用该指针
    s->base  = (ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
    if(s->base == NULL)
    {   
        printf("stack initial failed");
        exit(0);
    }
    s->top = s->base;
    s->stack_size  =  STACK_INIT_SIZE;
}
void push(STACK *s,ElemType e)
{
/*  if(s->top - s->base >= s->stack_size)
    {
        //printf("now\n");
        s->base  = (ElemType *)realloc(s->base,(s->stack_size + STACK_INCREAMENT_SIZE)*sizeof(ElemType));
        if(!s->base)
        {
            exit(0);
        }
        s->stack_size  = s->stack_size + STACK_INCREAMENT_SIZE; 
    }*/
    printf("s->top is %d \n",s->top);
    s->top++;
    }
ElemType  pop(STACK *s)
{

    return (s->base == s->top) ? -1  : *(--s->top);

}

int get_stack_len(STACK *s)
{

    return s->top - s->base;

}
int main()
{
    STACK_PTR s;
    init_stack(s);
    for(int i =0 ; i < 10 ; i++)
    {   printf("%d pushed \n",i+1);
        push(s,(ElemType)i);
    }

    return 0;
}

运行结果
我将36行37行屏蔽掉,可以正常运行,即屏蔽:
push函数中的:

printf("s->top is %d \n",s->top);
        s->top++;

运行正常

因此十分确定是访问成员top指针时出现的错误.....现在一头雾水 不知道啥情况。求大家帮忙解决一下。

  • 写回答

2条回答 默认 最新

  • MFine 2020-08-14 12:31
    关注

    你应该好好的学下*和&这两个符号

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀