代码的这一部分不断给我分割故障。这是一个堆栈结构。为了进行测试,我刚刚制作了全球变量顶部以跟踪堆栈。当我在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
(,因为编译器应在编译器上可以在微不足道上识别此类错误。