c - 段错误: 11 for C

标签 c struct segmentation-fault

这部分代码不断给我带来段错误。这是一个栈结构。为了进行测试,我只是创建了一个全局变量 top 来跟踪堆栈。当我用c++实现时,逻辑上没有问题,所以我不确定为什么会出现错误。谢谢。

struct v
{
  char *value;
  int ibase;
  int obase;
  struct v* next;
};
struct v* top = NULL;

void push(char* val, int ibas, int obas)
{
  struct v* newstackptr;
  newstackptr->next = top;
  newstackptr->value= val;
  newstackptr->ibase= ibas;
  newstackptr->obase= obas;
  top = newstackptr;
}

int main(){
char* value="111";
push(value,2,8);
return 0;
}

最佳答案

您声明了newstackptr,但从未分配它,因此它具有未定义的内容,并且当您分配其属性时,您正在写入有效的随机内存。您需要分配它:

struct v* newstackptr = malloc(sizeof(*newstackptr));

并且您通常应该提高编译器的警告级别(例如,在编译 gcc/clang 时传递 -Wall),因为这种错误应该可以被你的编译器轻松识别。

关于c - 段错误: 11 for C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48892988/

相关文章:

c - Linux C Shell,子进程抛出段错误

c++ - 无法理解这个SEGFAULT

C - 如何以编程方式在 Win32 中加载静态库?

c - 错误 C2016 : C requires that a struct or union has at least one member from struct

c - 屏幕上看不到实心球体

c - 在 n 叉树中查找元素

c# - 为什么结构比类慢?

struct - 有没有更好的方法将此行为组织为特征集合?

c - sizeof 对结构的不完整类型的无效应用

c++ - 为什么节点不能链接在一起?