我想使用链接列表在C上编程堆栈。我有一个CreateStack函数的问题。当我创建一个堆栈时,一切似乎都很好,但当我尝试创建另一个堆栈时,该程序只会崩溃。这里是我的代码的一部分使用列表的堆栈操作
#include <stdio.h>
#include <stdlib.h>
struct StackData{
int data;
struct StackData* prev;
struct StackPoint* point;
};
struct StackPoint{
struct StackData* basePointer;
struct StackData* stackPointer;
char exists;
};
int CreateNewStack(struct StackData** newPointer){
if((*newPointer)->point->exists=='Y') //i'm trying to check whether the list with the same adress has been already created and i think this is the part which causes error
return 1; //if error
else{
(*newPointer)=(struct StackData*)malloc(sizeof(struct StackData));
(*newPointer)->data=NULL;
(*newPointer)->prev=NULL;
(*newPointer)->point=(struct StackPoint*)malloc(sizeof(struct StackPoint));
(*newPointer)->point->basePointer=newPointer;
(*newPointer)->point->stackPointer=newPointer;
(*newPointer)->point->exists='Y';
return 0;
}
}
int main()
{
struct StackData *pointeris, *temp;
int state;
state=CreateNewStack(&pointeris); //state 0
state=CreateNewStack(&pointeris); //state 1
CreateNewStack(&temp); //crash
return 0;
}
你自己做了什么调试?建议您在调试器中运行程序和/或添加更多调试打印语句以帮助您找到问题。这只是调试101. – kaylum
在初始化之前使用具有自动存储持续时间的对象的值是未定义的行为。 – EOF
此代码有许多编译器警告。打开'-Wall',重新编译并修复它们。然后查看您的问题是否消失或重新发布固定代码。 – Schwern