如何解决此C代码中的运行时错误?

卡兰·辛格(Karan Singh)

我正在尝试编写代码来描述堆栈的所有基本操作,但是一旦编译并运行它,我就会开始编写代码。它立即停止工作。

我的IDE(CodeBlocks)中没有编译错误。我怎么知道我的代码中有什么错误?

我还可以以某种方式更改CodeBlocks中的设置以显示此类运行时错误吗?

我下面的代码有什么错误?是否一个接一个地使用箭头运算符(->)?谢谢你。

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

typedef struct node
{
    int data;
    struct node *prev;
}node;

typedef struct stack
{
    node *top;
}stack;

int count=0;

void push(stack *x, int num)
{
    node *temp;
    if(x->top == NULL)
    {
        temp=(node *)malloc(sizeof(node *));
        temp->data=num;
        temp->prev=NULL;
        x->top=temp;
    }
    else
    {
        temp=(node *)malloc(sizeof(node *));
        temp->data=num;
        temp->prev=x->top;
        x->top=temp;
    }
    count++;
    return;
}

int pop(stack *x)
{
    node *temp;
    int m;
    if(x->top == NULL)
    {
        printf("Error:The stack is empty\n");
        return;
    }
    else
    {
        m=(x->top)->data;
        temp=(x->top)->prev;
        x->top=temp;
    }
    count--;
    return m;
}
int main()
{
    int k=1, n, num;
    stack *myStack;
    myStack->top = NULL;
    while(k)
    {
        printf("Enter the operation you want to perform\n");
        printf("1.PUSH\n");
        printf("2.POP\n");
        printf("3.TOP\n");
        printf("4.STACK COUNT\n");
        scanf("%d", &n);
        switch(n)
        {
            case 1:
                printf("Enter the number you want to push to the stack\n");
                scanf("%d", &num);
                push(myStack, num);
                break;
            case 2:
                printf("The popped element is %d\n", pop(myStack));
                break;
            case 3:
                printf("The topmost element of the stack is %d\n", (myStack->top)->data);
                break;
            case 4:
                printf("The number of elements in the stack are %d\n", count);
                break;
            default:
                printf("Invalid request\n");
                break;
        }
        printf("Do you wish to perform another operation?(1/0)");
        scanf("%d", &k);
    }
    return 0;
}
尼希什·阿加瓦尔(Nityesh Agarwal)

您的代码的问题在于它没有为该结构分配任何内存。

    stack *myStack;
    myStack->top = NULL;

只要您不指定它,操作系统就不会知道它需要留出多少内存,或者根本不需要留出内存。当用户决定是否要运行时,一切都在运行时决定。

    printf("Do you wish to perform another operation?(1/0)");
    scanf("%d", &k);

通常,当您使用变量或指向变量的指针时,内存分配的工作由编译器和操作系统处理,因为它们知道变量的大小,但是在使用堆栈时(使用链表实现)您需要即时存储,因为用户可以确定他/她要存储或删除多少数据:

while(k)
{
    printf("Enter the operation you want to perform\n");
    printf("1.PUSH\n");
    printf("2.POP\n");
    printf("3.TOP\n");
    printf("4.STACK COUNT\n");
    scanf("%d", &n);
    switch(n)

因此需要动态内存分配。认为它可以更好地控制您的内存。它使您可以决定要如何处理内存。您可以要求操作系统提供您想要的任何大小的内存,并随您喜欢的时间随身携带。

我认为这回答了您的“为什么要动态记忆”的问题。现在,您的代码存在问题:

case 1:
            printf("Enter the number you want to push to the stack\n");
            scanf("%d", &num);
            push(myStack, num);

无需将任何结构的任何地址传递给push函数。内存分配在您的推送功能中处理。因此,您只需要:

push(num);

这意味着您需要使用它来更改函数声明和整个定义。函数声明应如下所示:

node* push(int);

现在,根据需要修改函数定义。

另外,为帮助您找出运行时错误,您可以借助IDE的内置调试器。因此,学习如何使用它。

我还认为,如果您从朋友的推荐书中读到有关动态内存分配的特定章节,可能会有所帮助:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何解决C代码中报告的错误“运行时错误出口代码6”?

来自分类Dev

如何解决摘要功能代码中的“ HTTP请求失败:何时不是字段”运行时错误?

来自分类Dev

如何解决VBA Excel代码运行时错误91

来自分类Dev

如何解决 OJ 上的“运行时错误”

来自分类Dev

如何解决运行时错误:找不到graphframes

来自分类Dev

如何解决android studio运行时错误?

来自分类Dev

如何解决R中ecdf函数中的运行时错误?

来自分类Dev

C ++代码中的运行时错误

来自分类Dev

代码C ++中的运行时错误

来自分类Dev

如何解决运行时错误“您必须提供layout_width属性。” 在android中?

来自分类Dev

在Java中将该程序作为命令行参数运行时出现错误,如何解决此问题?

来自分类Dev

如何解决此DirectX代码中的错误?

来自分类Dev

如何解决错误:在“(null)”中找不到所需的Java(TM)2运行时环境版本

来自分类Dev

使用onnx模型预测时如何解决运行时错误?

来自分类Dev

如何解决UPC运行时错误:共享内存不足

来自分类Dev

我如何解决运行时错误-2147219712(80040600):操作失败

来自分类Dev

出现错误“不存在Java运行时”,我该如何解决?

来自分类Dev

如何解决运行时错误:this.initializationApp is not a function(对不起,英语,我是巴西人)

来自分类Dev

如何解决运行时错误没有事务处于活动状态?

来自分类Dev

C / C ++运行时检查失败#2-变量'gradeLetter'周围的堆栈已损坏。Visual Studio2019。如何解决此问题?

来自分类Dev

代码中的运行时错误

来自分类Dev

为什么此代码给运行时分段错误?

来自分类Dev

Interface Builder运行时自动布局约束阻止视图占据固有尺寸,如何解决此问题?

来自分类Dev

如何解决此问题“无法在运行时权限之前触发默认处理程序提示”

来自分类Dev

Android App 在运行时无法工作,需要一些时间才能工作,如何解决此问题

来自分类Dev

为什么此代码在 URI Online Judge 中给出“运行时错误”

来自分类Dev

在MiniZinc中如何解决此错误?

来自分类Dev

此查询中的错误:如何解决?

来自分类Dev

C中的运行时错误(CodeChef)

Related 相关文章

  1. 1

    如何解决C代码中报告的错误“运行时错误出口代码6”?

  2. 2

    如何解决摘要功能代码中的“ HTTP请求失败:何时不是字段”运行时错误?

  3. 3

    如何解决VBA Excel代码运行时错误91

  4. 4

    如何解决 OJ 上的“运行时错误”

  5. 5

    如何解决运行时错误:找不到graphframes

  6. 6

    如何解决android studio运行时错误?

  7. 7

    如何解决R中ecdf函数中的运行时错误?

  8. 8

    C ++代码中的运行时错误

  9. 9

    代码C ++中的运行时错误

  10. 10

    如何解决运行时错误“您必须提供layout_width属性。” 在android中?

  11. 11

    在Java中将该程序作为命令行参数运行时出现错误,如何解决此问题?

  12. 12

    如何解决此DirectX代码中的错误?

  13. 13

    如何解决错误:在“(null)”中找不到所需的Java(TM)2运行时环境版本

  14. 14

    使用onnx模型预测时如何解决运行时错误?

  15. 15

    如何解决UPC运行时错误:共享内存不足

  16. 16

    我如何解决运行时错误-2147219712(80040600):操作失败

  17. 17

    出现错误“不存在Java运行时”,我该如何解决?

  18. 18

    如何解决运行时错误:this.initializationApp is not a function(对不起,英语,我是巴西人)

  19. 19

    如何解决运行时错误没有事务处于活动状态?

  20. 20

    C / C ++运行时检查失败#2-变量'gradeLetter'周围的堆栈已损坏。Visual Studio2019。如何解决此问题?

  21. 21

    代码中的运行时错误

  22. 22

    为什么此代码给运行时分段错误?

  23. 23

    Interface Builder运行时自动布局约束阻止视图占据固有尺寸,如何解决此问题?

  24. 24

    如何解决此问题“无法在运行时权限之前触发默认处理程序提示”

  25. 25

    Android App 在运行时无法工作,需要一些时间才能工作,如何解决此问题

  26. 26

    为什么此代码在 URI Online Judge 中给出“运行时错误”

  27. 27

    在MiniZinc中如何解决此错误?

  28. 28

    此查询中的错误:如何解决?

  29. 29

    C中的运行时错误(CodeChef)

热门标签

归档