gpt4 book ai didi

c - 在 C 中实现堆栈时出现段错误

转载 作者:行者123 更新时间:2023-11-30 20:14:10 24 4
gpt4 key购买 nike

我在运行此代码以在 C 中实现堆栈时遇到段错误。请注意,该代码有点不完整。我只是想检查一下是否可以将一些元素插入堆栈并打印出来。但它会引发段错误。任何帮助将不胜感激!!

#include<stdlib.h>
#include<stdio.h>

struct stack
{

int *elems;
int ll;
int al;
};

void stack_new(struct stack *s)

{
s->ll=0;
s->al=4;
s->elems=malloc(4*sizeof(int));
}

void stack_del(struct stack *s)
{
free(s->elems);
}

void stack_push(struct stack *s,int value)
{
if(s->ll==s->al)
{
printf("overflow");
/*s->al*=2;
s->elems=realloc(s->elems, s->al*sizeof(int));*/
}

s->elems[s->ll]=value;
s->ll++;
}

void stack_pop(struct stack *s)
{
s->ll--;
return (s->elems[s->ll]);
}

void main()
{
struct stack *s;

stack_new(s);
stack_push(s,3);
stack_push(s,4);
stack_push(s,8);

printf("%d", s->elems[0]);

//stack_pop(s);
//stack_del(s);
}

最佳答案

声明

struct stack *s;

不为结构堆栈分配任何内存。这样做:

struct stack *s = malloc(sizeof *s);

或者只是将你的堆栈放入堆栈中:

struct stack s;

stack_new(&s);

使用更具描述性的字段名称也是一个好主意。

关于c - 在 C 中实现堆栈时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27495572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com