[求助]哪里错误了,内存错误。
大家好,下面程序是实现进至转换,是我自己弄的,主要是利用链式站,
用顺序站没有问题!
我对链式不是很明白!
估计是pop哪里出错了!
提示的错误是c库里面的
是不是哪里调用错了!
请大家帮忙!
谢谢!
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define Null 0
typedef struct SNode
{
int data;
struct SNode *next;
}SNode;
void InitStack(SNode *s);
int Empty(SNode *s);
int Push(SNode *s, int x);
int Pop(SNode *s);
void conversion(int i);
SNode q;
int main(void)
{
int i;
while(1)
{
printf("将1个10进制数转换为2、8、16进制\n");
printf("1:10->2\n2:10->8 \n");
printf("3:10->16\n4:退出\n");
printf("\n");
do{
printf("请输入(1--4):");
scanf("%d",&i);
if(getchar()!='\n')
printf("输入非法!\n");
break;
}
while(i<1 || i>4);
switch(i)
{
case 1: conversion(2); break;
case 2: conversion(8); break;
case 3: conversion(16); break;
case 4: exit(1);
default:
break;
}
printf("按回车键继续:");
getchar();
while(getchar()!='\n') ;
system("cls");
}
}
void InitStack(SNode *s)
{
s=Null;
} /* 初始化栈*/
int Empty(SNode *s)
{
if(s==Null)
return 1;
else
return 0;
} /* 判断栈是否为空*/
int Push(SNode *s, int x)
{
SNode *p;
p=(SNode *)malloc(sizeof(SNode));
p->data=x;
p->next=Null;
if(s==Null)
s=p;
else
{
p->next=s;
s=p;
return 1;
}
} /* 进栈 */
int Pop(SNode *s)
{
int e;
SNode *p=s;
if(Empty(s))
{
printf("出错");
return 0;
}
else
{
e=s->data;
s=s->next;
free(p);
return e;
}
} /* 出栈*/
void conversion(int i)
{
int e,n;
InitStack(&q);
printf("请输入一个数字:");
scanf("%d",&n);
while(n)
{
Push(&q,n%i);
n/=i;
}
printf("结果是: ");
while(!Empty(&q))
{
e = Pop(&q);
if(e >= 10)
putchar(e+87);
else
printf("%d",e);
}
printf("\n");
}