c语言错误re,c语言malloc之后再realloc的有关问题
C/C++ code#include
#include
#include "../Status.h"
#define STACK_INIT_SIZE 5 //堆棧初始大小
#define STACKINCREMENT 5 //堆棧滿之后再增加的大小
typedef char *stackelem;
typedef struct
{
stackelem *base,*top;
int stacksize;
}sqstack;
/*------堆?;静僮?------*/
Status initstack(sqstack *s)
{
s->base=(stackelem *)malloc(STACK_INIT_SIZE*sizeof(stackelem));
if(!s->base) exit(OVERFLOW);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
Status stackempty(sqstack *s)
{
if(s->base==s->top) return TRUE;
return FALSE;
}
Status gettop(sqstack *s,stackelem *e)
{
if(stackempty(s))
{
e=NULL;
printf("取棧頂失敗:堆棧為空!\n");
return ERROR;
}
e=s->top-sizeof(stackelem);
return OK;
}
int stacklength(sqstack *s)
{
if(stackempty(s))
return 0;
else
return (s->top-s->base)/sizeof(stackelem);
}
Status push(sqstack *s,stackelem e)
{
if(stacklength(s)>=s->stacksize)
{
printf("堆棧已滿,增加空間\n");
s->base=(stackelem *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(stackelem));
if(!s->base)
{
printf("增加空間失敗,壓棧失敗,程序退出!\n");
exit(OVERFLOW);
}
s->top=s->base+s->stacksize*sizeof(stackelem);
s->stacksize+=STACKINCREMENT;
}
*(s->top)=e;
s->top+=sizeof(stackelem);
printf("元素 %s 壓棧成功!\n",e);
return OK;
}
Status pop(sqstack *s,stackelem e)
{
if(stackempty(s))
{
printf("出棧失敗:棧為空!\n");
return ERROR;
}
s->top-=sizeof(stackelem);
e=*(s->top);
/* *(s->top)=NULL ;*/
printf("元素 %s 出棧成功!\n",e);
return OK;
}
Status clearstack(sqstack *s)
{
stackelem e;
while(!stackempty(s)) pop(s,e);
printf("堆棧已經清空\n");
return OK;
}
Status destroystack(sqstack *s)
{
clearstack(s);
free(s->base);
printf("堆棧已經銷毀\n");
return OK;
}
Status printstack(sqstack *s)
{
printf("開始打印堆棧...\n\n");
if(stackempty(s))
{
printf("打印錯誤:沒有可以打印的內容!\n");
printf("\n打印堆棧結束.\n");
return ERROR;
}
stackelem *p=s->top;
while((p>s->base))
{
p-=sizeof(stackelem); //我認為malloc之后不管realloc多少次,如果沒有失敗,得到的空間應該是連續的,所以這樣寫
printf("\t%s\n",*p);
}
printf("\n打印堆棧結束.\n");
return OK;
}
void main()
{
sqstack s;
stackelem e;
initstack(&s);
/* push(&s,"2");
printstack(&s);
clearstack(&s);
printstack(&s);*/
push(&s,"1");
push(&s,"2");
push(&s,"3");
push(&s,"4");
push(&s,"5");
push(&s,"6");
push(&s,"7");
push(&s,"8");
push(&s,"9");
push(&s,"10");
push(&s,"11this is just for test");
push(&s,"12this is just for test");
push(&s,"13");
push(&s,"14 this for test");
push(&s,"15");
push(&s,"16");
push(&s,"17");
push(&s,"18");
printstack(&s);
pop(&s,e);
pop(&s,e);
pop(&s,e);
pop(&s,e);
pop(&s,e);
printstack(&s);
destroystack(&s);
}
總結
以上是生活随笔為你收集整理的c语言错误re,c语言malloc之后再realloc的有关问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 橙光游戏《芳菲年华》老爷与三少爷线攻略
- 下一篇: 写真馆宣传文案30句