免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1153 | 回复: 1
打印 上一主题 下一主题

十进制和8进制转换,为什么每次都要显示NULL pointer assignment [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-10 01:10 |只看该作者 |倒序浏览
请问各位哪里有错呢?我在tc3下运行!!!
#include <stdio.h>;
#include <stdlib.h>;
#define OK 1;
#define OVERFLOW -2
#define NULL 0
typedef int SElemType;
typedef int Status;
typedef int Boolean;
#define TRUE 1
#define ERROR 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
  SElemType *base;
  SElemType *top;
  int stacksize;
}Stack;
Status InitStack(Stack *s);  //creat a null S
Status Push(Stack *s, SElemType e);
Status Pop(Stack *s,SElemType e);
Status stackEmpty(Stack *s);
Status InitStack(Stack *s)
{
   s->;base=(SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
   if (!s->;base) exit(OVERFLOW);
   s->;top=s->;base;
   s->;stacksize=STACK_INIT_SIZE;
   return OK;
}//InitStack
Status Push(Stack *s,SElemType e)
{
   if (s->;top-s->;base>;=s->;stacksize)
   {
   s->;base=(SElemType *)realloc(s->;base,(s->;stacksize+STACKINCREMENT)*sizeof(SElemType));
   if (!s->;base) exit(OVERFLOW);
   s->;top=s->;base+s->;stacksize;
   }
   *s->;top++=e;
   return OK;
}//Push
Status Pop(Stack *s,SElemType e)
{
   if (s->;base==s->;top) return ERROR;
   e=*--s->;top;
   return e;
}//Pop
Boolean StackEmpty(Stack *s)
{
   if (s->;top==s->;base) return TRUE;
   else return ERROR;

}
Status DestroyStack(Stack *s)
/* The stack s has been destroyed. */
{
s->;top=NULL;
s->;stacksize=0;
free(s->;base);
s->;base=NULL;
return OK;
} /* DestroyStack */

main()
{  int n;
   SElemType e;
   Stack *s;
   InitStack(s);
   scanf("%d",&n);
   while(n)
  {
     Push(s,n%;
     n=n/8;
  }
  while(!StackEmpty(s))
    { e=Pop(s,e);
      printf("%d",e);
    }
    DestroyStack(s);
    printf("\n";
}//Push是% 8

论坛徽章:
0
2 [报告]
发表于 2004-03-10 04:17 |只看该作者

十进制和8进制转换,为什么每次都要显示NULL pointer assignment

问题出在以下两处:


  1. Stack *s;
  2. InitStack(s);
复制代码

  1. Status InitStack(Stack *s)
  2. {
  3. s->;base=(SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
  4. if (!s->;base) exit(OVERFLOW);
  5. s->;top=s->;base;
  6. s->;stacksize=STACK_INIT_SIZE;
  7. return OK;
  8. }//InitStack
复制代码


指针s在主函数中没有赋值,也没有对应的空间,然后调用InitStack函数,向其所指向的地址赋值。所以造成“空指针赋值错”。解决的办法,在调用InitStack函数之前,先给指针s申请空间。

话说回来,八进制和十进制的转换,要如此复杂么?请看如下代码

  1. scanf("%d",&n);
  2. printf("decimal=%d,     octal=%o\n",n,n);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP