当前位置: 首页 > news >正文

网站设计公司 深圳龙华三亚做网站多少钱

网站设计公司 深圳龙华,三亚做网站多少钱,网站建设项目进展情况,下载app最新版前言#xff1a;通过前面的学习#xff0c;我们知道C语言中在内存中开辟空间的方法有#xff1a;变量和数组。既然拥有了开辟空间的方法#xff0c;我们为什么还要学习动态内存分配呢#xff1f; int val 20; //在内存中开辟四个字节的空间 int arr[10] { 0 }; //在内…        前言通过前面的学习我们知道C语言中在内存中开辟空间的方法有变量和数组。既然拥有了开辟空间的方法我们为什么还要学习动态内存分配呢 int val 20; //在内存中开辟四个字节的空间 int arr[10] { 0 }; //在内存中开辟四十个字节的连续空间 变量和数组确实可以在内存中开辟空间但它们也有一些不足的点 ①、开辟的空间大小是固定的②、数组在申明的时候必须指定数组的长度它所需要的内存在编译时分配。但很多时候我们无法一开始就知道程序到底需要多少内存使用数值和变量当程序需要的内存变大时数组和变量开辟的空间是无法变大的满足不了程序的需求动态内存正是在这样的基础上诞生。 一、动态内存函数 1.1malloc和free 1.1.1mall函数语法和使用 malloc函数语法 malloc函数作用动态开辟内存可以向内存申请一块连续可以的空间并返回指向这块空间的指针。 malloc开辟空间指针返回注意点 如果间开辟成功时返回指向该空间的指针。         如果开辟空间失败返回一个NULL指针。         malloc函数的返回值类型为void* 类型malloc函数不会指定开辟空间的类型具体类型由使用者决定。 函数头文件        stdlib.h  Cplus地址malloc - C 参考 (cplusplus.com) int main() {int* p (int*)malloc(40);return 0; } 空间打印演示 int main() {int* p (int*) malloc(40);//判断空间是否开辟成功if (p NULL){perror(malloc); //开辟失败报错return 1;}//开辟成功int i 0;for ( i 0; i 10; i){printf(%d\n,*(p1)); //以十进制打印指针内容} return 0; } 代码里面的 int* p (int*) malloc(40); 与int arr[10] 具有相同的效果int类型为4个字节10个int类型的数据刚好大小为40个字节。 malloc函数开辟内存块的大小以字节为单位。是无符号整数类型size_t; malloc申请的空间在内存中的存储位置 malloc申请空间后  malloc 申请到空间后直接返回的是这快空间的起始地址不会初始化该空间的内容。所以是上面的代码打印过程中我们会发现打印的值为一些不正常的数字。 int main() {int* p (int*)malloc(40);if (p NULL){perror(malloc);return 1;}int i 0;for ( i 0; i 10; i){*(pi) i;}for ( i 0; i 10; i){printf(%d ,*(pi));}free(p);return 0; } 上面代码中最后在完成打印数据时书写了free(p); 的语句当我们将它去掉在VS中就行打印时视乎也没有什么特别大的问题但这里却必须要使用它这是为什么呢 1.1.2 free函数 free函数语法 void free (void* ptr); free函数的作用动态内存的释放和回收。 free函数注意点 ①、如果ptr指向的空间不是动态开辟的那么函数free的行为就是未定义行为。 ②、如果参数ptr是NULL指针则函数什么事情都不用做。 函数头文件stdlib.h Cplus地址free - C 参考 (cplusplus.com) 1.2calloc和realloc函数 前面我们学习了malloc同态内存开辟calloc函数的作用也是进行动态内存开辟的. calloc函数语法 函数功能开辟num个大小为size的元素开辟一块空间并且会将空间的每个字节初始化为0。 int main() {int* p (int*)calloc(10, sizeof(int)); //calloc动态空间开辟大小40字节if (p NULL){perror(calloc); //错误检测}//打印数据int i 0;for ( i 0; i 10; i){printf(%d ,p[i]);}free(p);return 0; } realloc函数语法 ptr 是要调整的内存地址size调整之后新大小。 realloc的返回值为调整后的内存起始位置。 realloc函数不仅会调整原内存空间大小还会将原来内存中的数据移动到新的空间。 realloc函数调整内存空间的两种情况 ①、原有空间之后有足够大的空间。 直接在原有内存之后追加空间原空间的数据不变。  ②、原有空间之后没有足够大的空间。 第二种情况时会开辟新的空间并且将就的空间中的数据拷贝到新的空间中释放旧的空间并且返回新空间的地址。  函数使用代码 int main() {int* p (int*)malloc(40);if (p NULL){perror(malloc);return 1;}//初始化为1~10int i 0;for ( i 0; i 10; i){p[i] i 1;}//扩展空间int* ptr realloc(p,80);if (ptr ! NULL){p ptr;}return 0; } 1.3常见的动态内存错误 1.对NULL指针进行解引用操作 int main() {int* p (int*)malloc(INT_MAX/4);*p 20;free(p); } 2、对动态开辟的空间越界访问 int main() {int i 0;int* p (int*)malloc(10*sizeof(int));if (NULL p){perror(malloc);}for ( i 0; i 10; i){*(pi) i;}free(p); } 3、对非动态开辟内存使用free释放 int main() {int a 10;int* p a;free(p); } 4、同一块空间多次释放  int main() {int i 0;int* p (int*)malloc(10*sizeof(int));if (NULL p){perror(malloc);}for ( i 0; i 10; i){*(pi) i;}free(p);p NULL;free(p); //错误地方。return 0; } 5、动态内存开辟忘记释放内存泄漏 int main() {int* p (int*) malloc(40);//判断空间是否开辟成功if (p NULL){perror(malloc); //开辟失败报错return 1;}//开辟成功int i 0;for ( i 0; i 10; i){printf(%d\n,*(p1)); //以十进制打印指针内容} return 0; }
http://www.zqtcl.cn/news/231705/

相关文章:

  • 信用网站建设工作简报青岛的建筑公司
  • 网站怎么做文件上传灯饰 东莞网站建设
  • 建设电子商务网站的规划书电子商务平台网站模板
  • 桂林网站建设 腾云安康养老院收费
  • 网站建设找酷风旅游手机网站开发
  • 宜昌建设厅网站开发公司起名大全
  • 龙口建设局网站深圳十大网站建设公司
  • 湛江网站设计哪家好公司网址怎么查询
  • 网站怎么设置关键词河南宣传片制作公司
  • 做网站 怎么赚钱吗安乡网站制作
  • 国外展览展示设计网站沧州网络推广管理公司
  • 物流信息平台网站建设深圳做手机网站建设
  • 品牌型网站的特点领导视察网站建设
  • 如何自己做网站推广淘宝客佛山小程序开发公司
  • 天津市建设局网站口碑营销相关案例
  • 怎么有自己的网站厂字形网页布局网站
  • 广州市财贸建设开发监理网站工程建设企业等采用
  • 网站建设规模设想自己建立网站教程
  • 兰溪建设局网站门户网站建设招标
  • 用wp做网站备案怎么查自己的邮箱号
  • 苏州企业网站建设公司价格数字媒体应用 网站开发
  • 西宁做网站seo四川省的住房和城乡建设厅网站首页
  • 响应式网站 有哪些弊端可以发广告的网站
  • wordpress 漫画站wordpress加目录
  • 天津商城网站制作深圳品牌网站设计公司
  • 初学网站开发上海市普陀区建设规划局网站
  • 网站开发完成后如何发布做网站用vs还是dw
  • 怎么看网站是否备案可信赖的菏泽网站建设
  • 做网站的优点系统软件开发服务
  • 深圳品牌营销网站建设尚品中国网站