gpt4 book ai didi

c - 分段(核心转储)

转载 作者:行者123 更新时间:2023-12-04 09:34:29 30 4
gpt4 key购买 nike

我一直在研究标准输入的修复后计算器,在研究它之后,我最终得到了一个说法“段错误(核心转储)”,它没有说明它发生的位置或导致它的原因,并在寻找解释后我真的找不到任何可以帮助我解决这个问题的东西。所以我决定我不妨在这里问一下,这是我迄今为止拥有的所有东西。

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

struct stack
{
int data;
struct stack *up;
};

void push( struct stack * ptr, int value)
{
struct stack * tmp;
tmp = malloc(sizeof(value));
tmp -> data = value;
tmp -> up = NULL;
}

int pop(struct stack * ptr)
{
int value;
struct stack * tmp;

tmp = ptr;
value = tmp-> data;
ptr = tmp -> up;

free(tmp);
return value;
}

int evaluate(int argc,const char * argv[],struct stack * ptr)
{
int h;
int i;

for (i = 0; i <= argc - 1; i++)
{
if (strcmp(argv[i], "M") == 0)
{

int a = pop(ptr);
int b = pop(ptr);
h = b*a;
push(ptr,h);

}
else if (strcmp(argv[i], "A") == 0)
{
printf("%s\n", "error \0");
int a = pop(ptr);
int b = pop(ptr);
h = b+a;
push(ptr,h);

}
else if (strcmp(argv[i], "D") == 0)
{

int a = pop(ptr);
int b = pop(ptr);
h = b/a;
push(ptr,h);


}
else if (strcmp(argv[i], "S") == 0)
{

int a = pop(ptr);
int b = pop(ptr);
h = b-a;
push(ptr,h);

}
else
{
printf("%s", "Not an operator");

}

}
return pop(ptr);
}

int main(int argc, const char *argv[])
{
struct stack s;
struct stack *ptr = s.up;
evaluate(argc,argv,ptr);
return EXIT_SUCCESS;
}

最佳答案

在 main 中您创建 struct stack s;并且不初始化它。

然后你通过s.up作为 evaluate 的第三个参数.

evaluate最终调用pop s.up ,免费调用s.up 。但是s.up仍未初始化,因此崩溃。

关于c - 分段(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28952914/

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