动态内存空间初始化方式的比较
2013-06-18 20:36
218 查看
动态内存空间初始化方式的比较
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)来释放内存空间。
所以,我觉得对动态申请的内存空间进行初始化时使用下标法比较好!
相关文章推荐
- 动态内存空间初始化方式的比较
- 比较String对象的两种初始化方式
- Oracle教程之Oracle管理表空间(十四)--表空间管理方式的比较
- Java中两种String对象创建和初始化方式比较
- I2C设备初始化方式4--从用户空间初始化I2C设备
- Java中两种String对象创建和初始化方式比较
- Java中两种String对象创建和初始化方式比较
- [原创].HAL的不同方式访问字符器件的空间开销简单比较
- CURL以 POST 请求链接的方式 初始化一个cURL会话来获取一个网页
- IOS中延时执行的几种方式的比较和汇总
- 排序算法时间复杂度、空间复杂度、稳定性比较
- 常用的几种进程通信方式的比较
- Spring容器的初始化4种方式
- 刚写出来的一个扫雷 打开一片空白的递归函数 比较简洁布雷方式
- SQL Server数据库导入导出数据方式比较
- C++中二维Vector初始化的一种方式
- 比较两种成员变量赋值方式的优缺点
- 动态代理两种方式及比较
- 用户空间与内核空间数据交换的方式(3)------模块参数与sysfs
- 用户空间与内核空间数据交换的方式(3)------模块参数与sysfs