• 动态内存空间初始化方式的比较


    动态内存空间初始化方式的比较
    1. 通过下标的方式进行初始化;
    2. 通过移动指针来进行初始化;

    /****************** 下标方式 ******************/
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main(void)
    {
    	int *p = (int *)malloc(5 * sizeof(int));
    	printf("这是下标法初始化方式:
    ");
    	for (int i = 0; i < 5; i++)
    	{
    		p[i] = i + 1;
    		printf("%d	", 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("这是通过移动指针初始化的方式:
    ");
    	int *pv = p;
    	for (i = 0; i < 5; i++)
    	{
    		*pv = i + 1;
    		printf("%d	", *pv);
    		pv++;
    	}
    	free(p);
    
    
    	return 0;
    }


    就其目的而言,两种方式都可以对动态申请的内存空间进行初始化,但是很明显第一种方式(下标方式)比第二种方式(移动指针方式)方便,也更安全。原因:在第二种方式(移动指针方式)中,如果直接移动定义的指针变量,在最后释放内存空间的时候,可能就忘记将指针位置移动到初始化时的位置(当然,也不推荐使用这种方式),而直接将这个指针传给free(void *pointer)来释放空间,然而,此时的指针位置已经变化,不再是那段内存空间的首地址,所以在释放内存时将导致运行时错误。为了解决这个问题,我们需要定义一个临时指针变量,使其指向原来指针所指向的位置,然后使用这个临时指针变量对内存空间进行初始化,最后将原来的指针传给free(void *pointer)来释放内存空间。
    所以,我觉得对动态申请的内存空间进行初始化时使用下标法比较好!

  • 相关阅读:
    Centos 卸载openjdk
    Hadoop安装之Hive集成与mysql安装
    Hadoop安装-Spark Windows 环境 pycharm开发环境搭建
    Hadoop安装—Spark安装
    Hadoop安装-伪分布式
    Hadoop安装之JDK在Centos虚拟机中安装
    SQL server 数据库调用远程数据库存储过程的实现方法
    以梦为马,铸就美好人生
    kettle实战演练——批量解压有密码的rar文件,并生成xml文件
    Linux diff命令
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3143019.html
Copyright © 2020-2023  润新知