有未初始化变量怎么办
#define bool char
#define true 1
#define false 0
#define MaxSize 100
typedef int ElemType;
typedef struct//定义栈
{
ElemType data[MaxSize];
int top;//栈顶指针
}SeqStack;
void InitStack(SeqStack *S)//初始化栈
{
S->top=-1;
}
int StackEmpty(SeqStack *S)//判断栈是否为空
{
if(S->top==-1)
return true; //栈为空
else
return false;
}
int Push(SeqStack *S,ElemType x)//入栈
{
if(S->top==MaxSize-1)
return false;
S->data[++S->top]=x;
return true;
}
int Pop(SeqStack *S,ElemType x)//出栈
{
if(S->top==-1)
return false;
x=S->data[S->top--];
printf("%d\n",x); //为查看栈的出栈元素
return true;
}
int GetTop(SeqStack *S,ElemType x)//获取栈顶元素
{
if(S->top==-1)
return false;
x=S->data[S->top];
printf("%d\n",x); //为查看栈的栈顶元素
return true;
}
void main()
{
SeqStack *s;
int m,x;
InitStack(s);
Push(s,3);
Push(s,9);
Push(s,17);
Pop(s,x);
m = StackEmpty(s);
GetTop(s,x);
printf("%d\n",m);
}
(52) :warning C4700: local variable 's' used without having been initialized
(56) : warning C4700: local variable 'x' used without having been initialized 展开
程序中并没有出现“未初始化”的问题。只是声明了指向栈的指针,却没有为栈分配存储空间。下面的程序作了修改,请查阅是否合乎要求?
#include<stdio.h>
#include<malloc.h>
#define bool char
#define true 1
#define false 0
#define MaxSize 100
typedef int ElemType;
typedef struct//定义栈
{ ElemType data[MaxSize];
int top;//栈顶指针
} SeqStack;
void InitStack(SeqStack *S)//初始化栈
{ S->top=-1;
}
int StackEmpty(SeqStack *S)//判断栈是否为空
{ if(S->top==-1)
return true; //栈为空
else
return false;
}
int Push(SeqStack *S,ElemType x)//入栈
{ if(S->top==MaxSize-1)
return false;
S->data[++S->top]=x;
return true;
}
int Pop(SeqStack *S,ElemType x)//出栈
{ if(S->top==-1)
return false;
x=S->data[S->top--];
printf("Pop x: %d\n",x); //为查看栈的出栈元素
return true;
}
int GetTop(SeqStack *S,ElemType *x)//获取栈顶元素
{ if(S->top==-1)
return false;
*x=S->data[S->top];
printf("S->top=%d\n",*x); //为查看栈的栈顶元素
return true;
}
void main()
{ SeqStack *s;
int m,x,i;
s=(SeqStack*)malloc(sizeof(SeqStack));
InitStack(s);
Push(s,3);
Push(s,9);
Push(s,17);
Pop(s,x);
m = StackEmpty(s);
GetTop(s,&x);
printf("m=%d x=%d\n",m,x);
}
C语言里一个指针只要还没有初始化那么它就是一个野指针(指向无效内存地址,已销毁的内存地址或者操作系统开端的地址的指针都属于野指针,可通过未初始化的指针,间接销毁指针指向的内存等方式产生)
所以你必须要先给你的s指针分配一个内存地址,然后让指针指向这个内存地址,才能操作,内存分配方法如下:
s=(SeqStack *)malloc(sizeof(SeqStack));
在C++中可以简化为:
s=new SeqStack;