首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c的数制变换,求大神改正

2012-11-07 
c的数制转换,求大神改正啊我在声明struct Men 结构体的时候,将内部指针赋空值,VC++就提示我错误,要是不赋

c的数制转换,求大神改正啊
我在声明struct Men 结构体的时候,将内部指针赋空值,VC++就提示我错误,要是不赋值,执行的时候,出现
debug assertion failed.可怜我不会上传图片啊


#include<stdio.h>
#include<stdlib.h>
#define M 8/*需要代表的进制数*/
#define MAX 100/*就目前我们简单处理问题,简化为问题需要转换的数位不超过100*/

struct Men {
int *base = NULL;
int *top = NULL;
};

void initstack(struct Men *s);
void push(struct Men *s,int n);
int stackempty(struct Men *s);
int pop(struct Men *s,int e);

int main()
{
int N;
int e;
struct Men s;
initstack(&s);
scanf(" %d",&N);
if (N >= 0 && N < 8){
printf(" %d",N);
}
while (N >= 8){
push(&s,N%8);
N = N / 8;
}
while (stackempty(&s)){/*我们可以看到,这里可以把函数或者赋值操作放在while
循环内部*/
e = pop(&s,e);
printf(" %d",e);
}
free(s.base);
free(s.top);
return 0;
}

void initstack(struct Men *s)
{
s->base = (int *)malloc(MAX * sizeof(int));
s->top = s->base;
}

void push(struct Men *s,int n)
{ /*这里我们先不考虑栈是否满*/
* s->top ++= n; /*要是自己做,绝对是*s.top=n;s.top++;可见一般*/
}

int stackempty(struct Men *s)
{
if (s->top == s->base) return 0;
else return 1;
}

int pop(struct Men *s,int e)
{
e = *s->top --;
return e;
}

[解决办法]
知道为什么报错吗,因为你对一个指针释放了两次,free(s.base);free(s.top);,你只申请了s.base,当然在释放top就不行了,先不说你的逻辑,按照你的函数书写,s.base的元素是不会被弹出来的,栈的操作应该是push,pop,top,isempty,其中pop并不需要返回栈顶元素,top是用来取得栈顶元素的,另外* s->top ++= n; 这种东西建议你现在还是少用,这种编译器相关的东西容易产生看不见的逻辑错误。

热点排行