huge200890 发表于 2014-1-20 07:10:58

关于栈的创建问题, 可以定义指针类型么

最下面是我的程序里的部分代码, 头文件部分是栈的创建和初始化,我的问题是在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;
}

故乡的风 发表于 2014-1-25 03:12:36

这是c语言的问题。根据你的InitStack的实现,你传入的指针不能为NULL,你的函数最好先加上这个判断;其次,指针说白了就是存储该对象的空间的首地址,你仅仅定义了一个指针变量,却不分配相应的空间,很显然不能用啊。可以定义一个指针变量后,malloc一段空间给它,然后就没得问题了,不过结束后要free掉这个空间。

陆小鱼 发表于 2014-8-13 20:54:48

故乡的风 发表于 2014-1-25 03:12
这是c语言的问题。根据你的InitStack的实现,你传入的指针不能为NULL,你的函数最好先加上这个判断;其次, ...

刚好碰上这个问题,亲的回答太棒了~~{:5_92:}

黑暗漩涡 发表于 2014-8-16 11:35:17

回帖是一种美德

迷雾少年 发表于 2014-8-29 07:08:19

指针指针,,他本身只是4字节的东西,,

ゃ莼处狼性ぉ 发表于 2014-8-31 10:59:37

支持楼主

郭兴华1 发表于 2014-8-31 12:30:49

强烈支持楼主ing……
页: [1]
查看完整版本: 关于栈的创建问题, 可以定义指针类型么