日期: 2022-09-20 15:21:31 浏览数:5

上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
连云港网站建设【连云港网络公司】连云港做网站、连云港微信公众号开发、连云港网站设计、连云港小程序制作
淮安位于江苏省中北部,江淮平原东部。地处长江三角洲地区, [1] 是苏北重要中心城市, [2] 南京都市圈紧密圈层城市,淮河生态经济带首提首推城市 [3] ,坐落于古淮河与京杭大运河交点,处在中国南北分界线“秦岭-淮河”线上,拥有中国第四大淡水湖洪泽湖,是全国文明城市 [4] 、国家历史文化名城、国家卫生城市、国家园林城市、国家环境保护模范城市、国家低碳试点城市、中国优秀旅游城市。为淮扬菜的主要发源地之一,是江淮流域古文化发源地之一。
淮安有2200多年建城史。秦时置县,境内有著名的“青莲岗文化”遗址。曾是漕运枢纽、盐运要冲,驻有漕运总督府、江南河道总督府。历史上与苏州、杭州、扬州并称运河沿线的“四大都市”,曾经淮安“因运而兴、因运而盛” [5] ,有“中国运河之都”的美誉。中国大运河淮安段入选世界遗产名录。淮安地处江苏省长江以北的核心地区,邻江近海,为南下北上的交通要道,区位优势独特。是江苏省的重要交通枢纽,也是长江三角洲北部地区的区域交通枢纽。
淮安人杰地灵,是一代伟人周恩来总理的故乡。 [6] 历史上诞生过大军事家韩信、汉赋大家枚乘、巾帼英雄梁红玉、《西游记》作者吴承恩、民族英雄关天培、《老残游记》作者刘鹗等。 [7]
淮安有著名的红色旅游景区周恩来故里景区、刘老庄八十二烈士陵园、黄花塘新四军军部纪念馆、苏皖边区政府旧址纪念馆等,生态旅游景区古淮河文化生态景区、里运河文化长廊、洪泽湖古堰景区、第一山国家森林公园、清晏园、金湖水上森林公园等。
. 隐式内存泄漏
如果程序应该释放内存而实际却没有释放,也会发生内存泄漏。如果我们不再需要某个对象但它仍然保存在堆上,就会发生隐式内存泄漏,一般这是程序员忽视所致。这类泄漏的主要问题是对象在使用的内存其实已经不需要了,应该归还给堆。最差的情况是,堆管理器可能无法按需分配内存,导致程序不得不终止。最好的情况是我们持有了不必要的内存。
在释放用struct关键字创建的结构体时也可能发生内存泄漏。如果结构体包含指向动态分配的内存的指针,那么可能需要在释放结构体之前先释放这些指针。
有几个内存分配函数可以用来管理动态内存,虽然具体可用的函数取决于系统,但大部分系统的stdlib.h头文件中都有如下函数:
malloc
realloc
calloc
free
表2-1总结了这些函数。
表2-1:动态内存分配函数

动态内存从堆上分配,至于一连串内存分配调用,系统不保证内存的顺序和所分配内存的连续性。不过,分配的内存会根据指针的数据类型对齐,比如说,4字节的整数会分配在能被4整除的地址边界上。堆管理器返回的地址是最低字节的地址。
在图2-3中,malloc函数在地址500处分配了4字节空间,第二次使用该函数在地址600处分配了内存。它们都处于4字节地址边界上,而且不是从相邻的内存位置上分配的。
malloc函数malloc函数从堆上分配一块内存,所分配的字节数由该函数唯一的参数指定,返回值是void指针,如果内存不足,就会返回NULL。此函数不会清空或者修改内存,所以我们认为新分配的内存包含垃圾数据。函数的原型如下:
void* malloc(size_t);复制代码
这个函数只有一个参数,类型是size_t。传递参数给这个函数时要小心,因为如果参数是负数就会引发问题。在有些系统中,参数是负数会返回NULL。
如果malloc的参数是0,其行为是实现相关的:可能返回NULL指针,也可能返回一个指向分配了0字节区域的指针。如果malloc函数的参数是NULL,那么一般会生成一个警告然后返回0字节。
以下是malloc函数的典型用法:
int *pi = (int*) malloc(sizeof(int));复制代码
执行malloc函数时会进行以下操作:
(1) 从堆上分配内存;
(2) 内存不会被修改或是清空;
(3) 返回首字节的地址。
注意 当
malloc无法分配内存时会返回NULL,所以,在使用它返回的指针之前先检查NULL是不错的做法,如下所示:int *pi = (int*) malloc(sizeof(int)); if(pi != NULL) { // 指针没有问题 } else { // 无效的指针 }复制代码
1. 要不要强制类型转换
C引入void指针之前,在两种互不兼容的指针类型之间赋值需要对malloc使用显式转换类型以避免产生警告。因为可以将void指针赋值给其他任何指针类型,所以就不再需要显式类型转换了。有些开发者认为显式类型转换是不错的做法,因为:
这样可以说明malloc函数的用意;
代码可以和C++(或早期的C编译器)兼容,后两者需要显式的类型转换。
如果没有引用malloc的头文件,类型转换可能会有问题,编译器可能会产生警告。C默认函数返回整数,如果没有引用malloc的原型,编译器会抱怨你试图把int赋值给指针。
2. 分配内存失败
如果声明了一个指针,但没有在使用之前为它指向的地址分配内存,那么内存通常会包含垃圾,这往往会导致一个无效内存引用的错误。考虑如下代码片段:
int *pi;...printf("%d
",*pi);复制代码内存分配如图2-5所示。

图2-5:没有分配内存

连云港网站建设【连云港网络公司】连云港做网站、连云港微信公众号开发、连云港网站设计、连云港小程序制作
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)