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);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

struts2面试问题_Struts2面试问答

struts2面试问题Struts2是用Java开发Web应用程序的著名框架之一。 最近,我写了很多Struts2教程 ,在这篇文章中,我列出了一些重要的Struts2面试问题以及答案,以帮助您进行面试。 什么是Struts2? Struts1和Struts2之间…

什么是Mesh网络

网络间的通信原理 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字&#xff0…

C语言按下列公式计算 求A20的值,2011年全国计算机二级C语言模拟试题及答案(10)...

一、 单项选择题(共30分,每题1分)1. 下列不正确的转义字符是( )A.\\B.\’C.074D.\02. 不是C语言提供的合法关键字是( )A.switchB.cherC.caseD.default3.正确的…

根据谁创建资源授权资源

我的一位同事向我提出了一个关于StackOverflow的有趣问题,并由于我在Spring方面的经验,建议我回答一个很好的问题。 问题是:“ 如何基于使用注释在REST中创建资源的用户来授权特定资源 。” 要点是: 我想做的是创建一个名为Aut…

组播详解

本文转自:http://liuqz926.blog.163.com/blog/static/13448936220091121104233491/ 组播协议允许将一台主机发送的数据通过网络路由器和交换机复制到多个加入此组播的主机,是一种一对多的通讯方式。 IP组播的好处、优势 组播协议与现在广泛使用的单播…

ccf2017除法C语言,CCF考试——201709-5除法

概要问题描述小葱喜欢除法,所以他给了你N个数a1, a2, ⋯, aN,并且希望你执行M次操作,每次操作可能有以下两种:给你三个数l, r, v,你需要将al, al1, ⋯, ar之间所有v的倍数除以v。给你两个数l, r,你需要回答…

c语言中系统函数设定像素,在imag中对每个像素应用自定义函数的快速方法

我正在寻找一种更快的方法来应用一个自定义函数到一个图像,我用来删除蓝色背景。我有一个函数可以计算出每个像素与背景中蓝色的距离。带有循环的原始代码如下所示:def dist_to_blue(pix):rdist 76 - pix[0]gdist 150 - pix[1]bdist 240 - pix[2]retu…

netbeans7.4_NetBeans 7.4的本机Java打包

netbeans7.4成为“ NetBeans 74 NewAndNoteworthy ”页面的NetBeans 7.4的新功能之一是“本机打包 ”,在该页面上被描述为“ JavaSE项目现在支持使用JavaFX提供的本机打包技术来创建本机包。 ” 我将使用一个非常简单的示例来演示NetBeans 7.4中的本机打包功能。 下…

斯坦纳点/树、泰森多边形

斯坦纳点 斯坦纳点别名正等角中心、费尔马点、斯坦纳点 在三角形的三边各向其外侧作等边三角形,这三个等边三角形的外接圆交于一点T,该点T即称为托里拆利点(Torricelli’s point ),而三个等边三角形的外接圆称为托里拆…

c语言如何将程序保存在文件,急求如何将下列C语言程序数据存储到文件中?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n0;int rest[7][7]; //全局声明,以供全局调用int main(){void perm(int list[],int ,int );int …

FXRibbon 1.2版发布

这次,有所不同。 Microsoft对FXRibbon的更新,就像Java的功能区控件(JavaFX)一样 。 在发出使FXRibbon做好更好的准备以将其更新到Java 9以及更高版本的要求之后,我借此机会还添加了一些功能,进行了一些美学…

路由和交换

路由和交换 网络的工作方式是使用两种设备:交换机和路由器,来将计算机与外围设备连接起来。这两种工具使连接到网络上的设备之间以及其它网络相互通信。 虽然路由器和交换机看起来很像,但是它们在网络中的功能却截然不同: 交换机…

c语言链表写贪吃蛇思路,C语言构建的链表贪吃蛇

用C语言链表写的贪吃蛇(程序设计时做的,做的不好大佬勿喷)借助游戏内容分析贪吃蛇所需的功能主要包括这几块:移动光标模块打印地图模块和基本规则信息读取最高分文件打印初始蛇模块打印时给予蛇的初始移动方向产生食物模块1)、保证食物在地图内产生2)、保…

用普罗米修斯和格拉法纳乐器来刺豪猪

Adam Bien的Porcupine库使配置用作应用程序隔板的专用执行程序服务变得容易。 我创建了一个扩展,通过MicroProfile Metrics公开了豪猪统计信息。 我们还可以通过Prometheus和Grafana仪表板使仪器可见。 进行此扩展的原因是我们希望对Porcupine线程池的检测进行简单…

三层网络架构

三层网络架构 数据中心网络是连接数据中心大规模服务器进行大型分布式计算的桥梁。 传统数据中心网络普遍采用树型拓扑方案. 典型的拓扑由三层交换机互联构成,分别是接入层交换机、汇聚层交换机和核心层交换机。Cisco称之为:分级的互连网络模…

c语言调用labview方法,LabVIEW与C语言接口的方法

摘要介绍了一种LabVIEW与C 语言接口的方法,由实例证明,该方法高效、易行,是增强LabVIEW整体功能的一条有效的途径。关键词虚拟仪器LabVIEW 动态链接库LabVIEW是一种方便灵活的虚拟仪器开发环境。当前,虚拟仪器技术已广泛应用到各种…

SDN

直接理解 SDN是在2009年左右出现的一种新型网络结构,它将数据层面与控制层面分离,使用中央控制器完成网络的操作和管理,并通常采用OpenFlow协议作为其核心通信协议,拥有着集中式控制、可编程、部署灵活性和数据层面与控制层面相互…

gradle插件 java_简单的Gradle Java插件自定义

gradle插件 java正如我在“ 用Gradle构建Java的初步了解”一文中所展示的那样,当Gradle使用Java插件并将文件和目录放置在该插件期望的位置时, Gradle尤其适用于构建Java应用程序的基础知识(约定-基于项目的布局 )。 但是&#xf…

android 检测过程,Android 系统对permision的检测过程

Android 系统对permision的检测过程RK3288 5.1 中以太网设置静态IP 对permission的检测简略的调用过程如下:frameworks\opt\net\ethernet\java\com\android\server\ethernet\EthernetServiceImpl.javapublic void setConfiguration(IpConfiguration config) {if (!m…