关于栈的创建问题, 可以定义指针类型么
最下面是我的程序里的部分代码, 头文件部分是栈的创建和初始化,我的问题是在main函数里定义栈并且初始化时我可以定义指针类型么?因为初始化函数里InitStack需要传进的是地址,比如:int main()
{
ElemType c;
sqStack *s1;//这里定义指针
InitStack(s1); // 初始化栈s1, 直接传入指针地址
return 0;
}
源代码里可以编译通过,但是运行时会显示停止运行, 是哪里想不明白呢? 正初学数据结构, 万分感谢!
源代码里的正确代码应该是
int main()
{
ElemType c;
sqStack s1;
InitStack(&s1); // 初始化栈s1,引用s1的地址
return 0;
}
源代码(部分)
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;
// 函数功能:初始化栈
// 参数*s:栈的地址
void InitStack(sqStack *s)
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if( !s->base )
{
exit(0);
}
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}
int main()
{
ElemType c;
sqStack s1;
InitStack(&s1); // 初始化栈s1
return 0;
}
这是c语言的问题。根据你的InitStack的实现,你传入的指针不能为NULL,你的函数最好先加上这个判断;其次,指针说白了就是存储该对象的空间的首地址,你仅仅定义了一个指针变量,却不分配相应的空间,很显然不能用啊。可以定义一个指针变量后,malloc一段空间给它,然后就没得问题了,不过结束后要free掉这个空间。 故乡的风 发表于 2014-1-25 03:12
这是c语言的问题。根据你的InitStack的实现,你传入的指针不能为NULL,你的函数最好先加上这个判断;其次, ...
刚好碰上这个问题,亲的回答太棒了~~{:5_92:} 回帖是一种美德 指针指针,,他本身只是4字节的东西,, 支持楼主 强烈支持楼主ing……
页:
[1]