
发表日期: 2021-04-25 09:50:17 浏览次数:100
连云港网站制作【连云港网站优化】连云港建网站、连云港微信公众号运营、连云港网页设计、连云港微信小程序商城
淮安位于江苏省中北部,江淮平原东部。地处长江三角洲地区, [1] 是苏北重要中心城市, [2] 南京都市圈紧密圈层城市,淮河生态经济带首提首推城市 [3] ,坐落于古淮河与京杭大运河交点,处在中国南北分界线“秦岭-淮河”线上,拥有中国第四大淡水湖洪泽湖,是全国文明城市 [4] 、国家历史文化名城、国家卫生城市、国家园林城市、国家环境保护模范城市、国家低碳试点城市、中国优秀旅游城市。为淮扬菜的主要发源地之一,是江淮流域古文化发源地之一。
淮安有2200多年建城史。秦时置县,境内有著名的“青莲岗文化”遗址。曾是漕运枢纽、盐运要冲,驻有漕运总督府、江南河道总督府。历史上与苏州、杭州、扬州并称运河沿线的“四大都市”,曾经淮安“因运而兴、因运而盛” [5] ,有“中国运河之都”的美誉。中国大运河淮安段入选世界遗产名录。淮安地处江苏省长江以北的核心地区,邻江近海,为南下北上的交通要道,区位优势独特。是江苏省的重要交通枢纽,也是长江三角洲北部地区的区域交通枢纽。
淮安人杰地灵,是一代伟人周恩来总理的故乡。 [6] 历史上诞生过大军事家韩信、汉赋大家枚乘、巾帼英雄梁红玉、《西游记》作者吴承恩、民族英雄关天培、《老残游记》作者刘鹗等。 [7]
淮安有著名的红色旅游景区周恩来故里景区、刘老庄八十二烈士陵园、黄花塘新四军军部纪念馆、苏皖边区政府旧址纪念馆等,生态旅游景区古淮河文化生态景区、里运河文化长廊、洪泽湖古堰景区、第一山国家森林公园、清晏园、金湖水上森林公园等。
执行这段代码可能会导致一个运行时异常。字符串中这类问题比较常见,如下所示:
char *name;printf("Enter a name: ");scanf("%s",name);复制代码这里使用的是name所引用的内存,看起来似乎可以正确执行,实际上这块内存还没有分配。把图2-5中的pi换成name就可以说明这个问题。
3. 没有给malloc传递正确的参数
malloc函数分配的字节数是由它的参数指定的,在用这个函数分配正确的字节数时要小心。比如说要为10个双精度浮点数分配空间,那就需要80字节,通过下面的代码可以做到:
double *pd = (double*)malloc(NUMBER_OF_DOUBLES * sizeof(double));复制代码
注意 为数据类型分配指定字节数时尽量用
sizeof操作符。
下例尝试为10个双精度浮点数分配内存:
const int NUMBER_OF_DOUBLES = 10;double *pd = (double*)malloc(NUMBER_OF_DOUBLES);复制代码
这段代码实际只分配了10字节。
4. 确认所分配的内存数
没有标准的方法可以知道堆上分配的内存总数,不过有些编译器为此提供了扩展。另外,也没有标准的方法可以知道堆管理器分配的内存块大小。
比如说,如果我们为一个字符串分配64字节,堆管理器会分配额外的内存来管理这个块。所分配内存的总大小,以及堆管理器所用到的内存数,是两者的和。图2-2对此有说明。
malloc可分配的最大内存是跟系统相关的,看起来这个大小由size_t限制。不过这个限制可能受可用的物理内存和操作系统的其他限制所影响。
执行malloc时应该分配所请求数量的内存然后返回内存地址。如果操作系统采用“惰性初始化”策略直到访问内存才真正分配的话会怎样?这时候万一没有足够的内存用来分配就会有问题,答案取决于运行时和操作系统。开发者一般不需要处理这个问题,因为这种初始化策略非常罕见。
5. 静态、全局指针和malloc
初始化静态或全局变量时不能调用函数。下面的代码声明一个静态变量,并试图用malloc来初始化:
static int *pi = malloc(sizeof(int));复制代码
这样会产生一个编译时错误消息,全局变量也一样。对于静态变量,可以通过在后面用一个单独的语句给变量分配内存来避免这个问题。但是全局变量不能用单独的赋值语句,因为全局变量是在函数和可执行代码外部声明的,赋值语句这类代码必须出现在函数中:
static int *pi;pi = malloc(sizeof(int));复制代码
注意 在编译器看来,作为初始化操作符的
=和作为赋值操作符的=不一样。
calloc函数calloc会在分配的同时清空内存。该函数的原型如下:
void *calloc(size_t numElements, size_t elementSize);复制代码
注意 清空内存的意思是将其内容置为二进制0。
calloc函数会根据numElements和elementSize两个参数的乘积来分配内存,并返回一个指向内存的第一个字节的指针。如果不能分配内存,则会返回NULL。此函数最初用来辅助分配数组内存。
如果numElements或elementSize为0,calloc可能返回空指针。如果calloc无法分配内存就会返回空指针,而且全局变量errno会设置为ENOMEM(内存不足),这是POSIX错误码,有的系统上可能没有。
下例为pi分配了20字节,全部包含0:
int *pi = calloc(5,sizeof(int));复制代码
不用calloc的话,用malloc函数和memset函数可以得到同样的结果,如下所示:
int *pi = malloc(5 * sizeof(int));memset(pi, 0, 5* sizeof(int));复制代码
注意
memset函数会用某个值填充内存块。第一个参数是指向要填充的缓冲区的指针,第二个参数是填充缓冲区的值,最后一个参数是要填充的字节数。
如果内存需要清零可以使用calloc,不过执行calloc可能比执行malloc慢。
注意
cfree函数已经没用了。早期的C用cfree来释放calloc分配的内存。

连云港网站制作【连云港网站优化】连云港建网站、连云港微信公众号运营、连云港网页设计、连云港微信小程序商城
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878