这个堆栈是一个动态的,当内存不足时会新申请一些内存,所以数据应该是可以不断地输入的,可是为什么每次输入到10左右数字的时候就总会出错啊?
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#define STACK_SIZE 2
#define STACKINCREAT 2
#define len sizeof(struct simple)
typedef struct simple
{
int * base;
int * top;
int stacksize;
} * stack;
int * creat(stack p)
{
int n;
int * baocun;
int * q;
int * head;
p=(stack)malloc(len);
p->stacksize=STACK_SIZE;
p->top=(int *)malloc(p->stacksize);
head=p->base=p->top;
scanf("%d",p->top);
while(*p->top!=25)
{
q=p->top;
(p->top)++;
if((p->top-p->base)>(p->stacksize))
{
(p->stacksize)+=STACKINCREAT;
p->top=(int *)malloc(p->stacksize);
if(p->top==NULL)
{
printf("your number is wrong!");
}
else
{
p->base=p->top;
while(head<=q)
{
*(p->top)=*head;
head++;
(p->top)++;
}
head = p->base;
scanf("%d",p->top);
}
}
else
{
scanf("%d",p->top);
}
}
return p->base;
}
print(int * p)
{
while(*p!=25)
{
printf("%d\n",*p);
p++;
}
}
void main()
{
stack p;
creat(p);
}
可是我每次 P->top++的时候都在之前 加上了 p->top=malloc(10);啊 这样说是不是 这个新申请的内存空间不是连续的呢?
追答这里严重问题: while(*p->top!=25)
{
q=p->top;
(p->top)++;//把地址加4个字节
虽然你后面使用了Malloc分配了空间,可以你只在if中使用了,当不是if的时候,就是到这里了,
这样内存访问出错了,
建议你看看链表的数据结构,怎么用指针实现其功能,堆栈就理解了。