| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 22482 人关注过本帖
标题:程序出现exe已停止工作,问题无法解决
只看楼主 加入收藏
熊猫的黑眼圈
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-2-19
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:5 
程序出现exe已停止工作,问题无法解决
程序代码:
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#define STACK 10
#define INIT 100
typedef struct
{
    int *base;
    int *top;
    int stacksize;
}Sqstack;
/*********构造栈***********/
void initstack(Sqstack *s)
{
    s->base=(int *)malloc(INIT * sizeof(int));
    s->top=s->base;
    s->stacksize=INIT;
}
/**********显示栈顶元素**********/
void gettop(Sqstack *s,int e)
{
    if(s->top==s->base)
        return ;
    e=*(s->top-1);
}
/*************插入新的栈顶元素*************/
void push(Sqstack *s,int e)
{
    if(s->top-s->base>=s->stacksize)
    {
        //栈满,追加存储空间
        s->base=(int *)realloc(s->base,(s->stacksize+STACK) * sizeof(int));
        if(!s->base)
            exit (0);  //存储分配失败
        s->top=s->base+s->stacksize;
        s->stacksize+=STACK;
    }
    printf("请输入要插入的栈顶元素:");
    scanf("%d",&e);
    *s->top=e;
    s->top++;
}
/***********删除栈顶元素************/
void pop(Sqstack *s,int e)
{
    if(s->top==s->base)
        return ;
    s->top--;
    e=*s->top;
}
void main()
{
    Sqstack *a=0;
    int n,k,e=0,i;
    printf("以下进行栈的相关操作\n");
    initstack(a);
    printf("请输入构建栈的数据个数:");
    scanf("%d",&n);
    if(n>=a->stacksize)
    {
        //栈满,追加存储空间
        a->base=(int *)realloc(a->base,(a->stacksize+STACK) * sizeof(int));
        if(!a->base)
            exit (0);
    }
    for(i=0;i<n;i++)
    {
        printf("输入元素:");
        scanf("%d",a->top);
        a->top++;    //s->top指栈内地址
    }
    //此处需要存储的数据都已经放在了栈S里面
    printf("请选择要进行的操作\n");
    printf("1.显示栈顶元素\n");
    printf("2.插入新的栈顶元素\n");
    printf("3.删除栈顶元素\n");
    printf("选择的操作为:");
    scanf("%d",&k);
    if(k==1)
    {
        gettop(a,e);
        printf("栈顶元素为%d",e);
    }
    if(k==2)
    {
        push(a,e);
        printf("形成的新栈为:");
        for(i=0;i<n+1;i++)
            scanf("%d",a->top);
    }
    if(k==3)
    {
        pop(a,e);
        printf("要删除的栈顶元素为%d",e);
    }
} 
搜索更多相关主题的帖子: 工作 color 
2012-11-22 01:41
熊猫的黑眼圈
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-2-19
收藏
得分:0 
编译出来时没有语法错误显示,但就是显示“exe已停止工作”,求各位大侠帮忙看看
2012-11-22 01:44
pengzhuo2008
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:29
专家分:68
注 册:2012-9-28
收藏
得分:5 
你指针用的不对
Sqstack *a=0; 这一句你的意思是想将a定义为空指针, 不过不建议这样写,应该写成
Sqstack *a = NULL;
然后在initstack()方法中
s->base 这一句就会有问题了, 因为此时你传进去的指针本身就是一个空指针, 用空指针去操作成员变量肯定是有问题的.

1+1=2
2012-11-22 09:10
熊猫的黑眼圈
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-2-19
收藏
得分:0 
回复 3楼 pengzhuo2008
改成了Sqstack *a;还是不行啊
2012-11-22 20:48
pengzhuo2008
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:29
专家分:68
注 册:2012-9-28
收藏
得分:0 
回复 4楼 熊猫的黑眼圈
你有没有认真的学过指针呢。
你直接这样子, 相当于在使用一个野指针, 未定义的啊。
你初始化一下啦, 让这个指针指向一个实际的,真正存在的地址。

1+1=2
2012-11-23 08:21
lxsjzbd
Rank: 4
来 自:河北省
等 级:业余侠客
帖 子:97
专家分:258
注 册:2012-3-31
收藏
得分:5 
1: 头文件,对于malloc函数,stdlib.h和malloc.h里边都有的,只要包含一个;
2: 百度搜索一下getmemory
3:  主函数只定义了一个指针,还没定义结构体,也就还没有开辟结构体内存,那你用malloc开辟的内存的首地址的值放到哪里呢?
2012-11-23 16:02
快速回复:程序出现exe已停止工作,问题无法解决
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019267 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved