微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在C中的pop函数中修复总线错误?

如何解决如何在C中的pop函数中修复总线错误?

我试图用堆栈的实现来反转 C 中的一个词。例如,如果 ı 使用参数字符串“Ali”调用 reverseArray 函数,则函数应该反转单词并使其成为“ilA”。问题是当我尝试从堆栈中弹出值时,会出现 bus error

这是stack结构。

struct stack
{
    int top;
    unsigned capacity;
    char *ar;
};

这是我的 reverseArray 函数

void reverseArray(char word[])
{   // Length of the given word.
    int loe = strlen(word);
    printf("%d",loe);
    struct stack* stck = createStack(loe);
    
    int i;
    for (i = 0; i < loe; i++) 
    Push(stck,word[i]); 
    
    // This is the line bus error occurs.
    for (i = 0; i < loe; i++)
    word[i] = Pop(stock);
    
}  

这是我的 Pop 函数

char Pop(struct stack* my_stack)
{
    if (isEmpty(my_stack))
    {
        
        return 0;
    }

    return my_stack->ar[my_stack -> top--];
}

这是我的推送功能

void Push(struct stack* my_stack,char val)
{
    if (isFull(my_stack))
    {
        printf("Overflow!!!!!!");
        return;
    }
    my_stack -> top += 1;
    my_stack->ar[my_stack -> top] = val;
}

这是我的 isEmpty 函数

int isEmpty(struct stack* my_stack)
{
    return my_stack -> top == -1;
}

这是我的createStack函数

struct stack* createStack(unsigned capacity)
{
    struct stack* newStack = (struct stack*)malloc(sizeof(struct stack));
    newStack -> top = -1;
    newStack -> capacity = capacity;
    newStack -> ar = malloc(newStack -> capacity * sizeof(char*));

    return newStack;
}

我认为问题出在 Pop 函数中。如果我删除 reverseArray 函数代码的 Pop 部分,函数工作正常。欢迎询问更多信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。