动态内存空间初始化方式的比较
来源:互联网 发布:西安网络电视台 编辑:程序博客网 时间:2024/06/06 03:10
动态内存空间初始化方式的比较
1. 通过下标的方式进行初始化;
2. 通过移动指针来进行初始化;
就其目的而言,两种方式都可以对动态申请的内存空间进行初始化,但是很明显第一种方式(下标方式)比第二种方式(移动指针方式)方便,也更安全。原因:在第二种方式(移动指针方式)中,如果直接移动定义的指针变量,在最后释放内存空间的时候,可能就忘记将指针位置移动到初始化时的位置(当然,也不推荐使用这种方式),而直接将这个指针传给free(void *pointer)来释放空间,然而,此时的指针位置已经变化,不再是那段内存空间的首地址,所以在释放内存时将导致运行时错误。为了解决这个问题,我们需要定义一个临时指针变量,使其指向原来指针所指向的位置,然后使用这个临时指针变量对内存空间进行初始化,最后将原来的指针传给free(void *pointer)来释放内存空间。
所以,我觉得对动态申请的内存空间进行初始化时使用下标法比较好!
1. 通过下标的方式进行初始化;
2. 通过移动指针来进行初始化;
/****************** 下标方式 ******************/#include <stdio.h>#include <stdlib.h>int main(void){int *p = (int *)malloc(5 * sizeof(int));printf("这是下标法初始化方式:\n");for (int i = 0; i < 5; i++){p[i] = i + 1;printf("%d\t", p[i]);}free(p);return 0;}
/****************** 移动指针方式 ******************/#include <stdio.h>#include <stdlib.h>int main(void){int i;int *p = (int *)malloc(5 * sizeof(int));printf("这是通过移动指针初始化的方式:\n");int *pv = p;for (i = 0; i < 5; i++){*pv = i + 1;printf("%d\t", *pv);pv++;}free(p);return 0;}
就其目的而言,两种方式都可以对动态申请的内存空间进行初始化,但是很明显第一种方式(下标方式)比第二种方式(移动指针方式)方便,也更安全。原因:在第二种方式(移动指针方式)中,如果直接移动定义的指针变量,在最后释放内存空间的时候,可能就忘记将指针位置移动到初始化时的位置(当然,也不推荐使用这种方式),而直接将这个指针传给free(void *pointer)来释放空间,然而,此时的指针位置已经变化,不再是那段内存空间的首地址,所以在释放内存时将导致运行时错误。为了解决这个问题,我们需要定义一个临时指针变量,使其指向原来指针所指向的位置,然后使用这个临时指针变量对内存空间进行初始化,最后将原来的指针传给free(void *pointer)来释放内存空间。
所以,我觉得对动态申请的内存空间进行初始化时使用下标法比较好!
- 动态内存空间初始化方式的比较
- 动态链接库两种调用方式的比较
- 动态链接库两种调用方式的比较
- 动态链接库两种调用方式的比较
- 动态内存空间的开辟与释放
- 不要过早的释放动态内存空间
- 动态链接库的内存空间测试
- 记录一个指针问题(内存空间的初始化)
- C/C++程序的内存空间及堆、栈区比较
- 动态申请内存空间
- Delphi中动态链接库两种调用方式的比较
- Delphi中动态链接库两种调用方式的比较
- Delphi中动态链接库两种调用方式的比较
- Delphi中动态链接库两种调用方式的比较
- 动态申请内存方式和数组的比较
- Unity中资源动态加载的几种方式比较
- Unity中资源动态加载的几种方式比较
- Unity中资源动态加载的几种方式比较
- Axis2(10):使用soapmonitor模块监视soap请求与响应消息
- JavaWeb 服务启动时,在后台启动加载一个线程。
- 如何在ArcGIS Engine的Globe中进行三维定位
- 设计模式笔记(3)---抽象工厂模式(创建型)
- 【php博一博】php的include和require路径问题
- 动态内存空间初始化方式的比较
- Axis2(9):编写Axis2模块(Module)
- 通过宏代码自动解除excel工作表格保护
- UIImage,CGImage和CGImageRef详解
- Axis2(8):异步调用WebService
- Siverlight 动态生成datagrid复杂表头
- unix下各种包安装方法备忘
- node.js安装
- 改善C#程序的建议2:C#中dynamic的正确用法