zoukankan      html  css  js  c++  java
  • 关于函数中内存操作

    1、传址申请内存问题。

    看下面一个例子。

    struct complex_t  //复数
    {
    	int real;  //实数
    	int imag;   //虚数
    };
    
    int create(complex_t *p, unsigned int n)
    {
    	p = new complex_t[n];    //申请n个complex
    	if(p == NULL)
    		return -1;
    	else return 0;
    }
    

    然后在main函数中调用该函数:

    complex_t *comps = NULL;
    if(create(comps, 10) < 0)  //调用函数
    {
    	printf("create failed\n");
    	return -1;
    }
    
    if(comps == NULL)
    {
    	cout<<"comps is NULL\n";
    	return -1;
    }
    
    //其它操作
    

        create函数的第一个参数,类型时complex_t * 。 然后,在create里面给p分配了一块存储空间。指针做参数,将申请的内存地址返回。
      其实执行之后comps == NULL。
      main函数中调用create函数时,把comps赋值给p。即指针p指向与comps相同的一段存储空间。  但是,在create里面,p=new complex_t[n],使得p又指向了一块新的存储空间。而此时,comps还是指向原来的存储空间。所以,在create里面对p做的更改对comps并没有影响。
      函数create里的参数 complex_t *可以整体类比成int;这样就好理解多了。

      通过上面的分析,不难给出解决办法:

    int create(complex_t **p, unsigned int n)
    {
    	*p = new complex_t[n];    //申请n个complex
    	if(p == NULL)
    		return -1;
    	else return 0;
    }
    
  • 相关阅读:
    linux常用命令
    webStorm关闭自动保存
    jquery封装常用的方法
    请求头的设置
    表单序列化对象,jquery
    linux开机启动Tomcat服务器
    centOS安装git,保存用户名和密码
    CentOS7启动Tomcat报错:./startup.sh: Permission denied
    javaWeb使用百度编辑器上传图片的问题
    es6-Symbol用法
  • 原文地址:https://www.cnblogs.com/flysnail/p/2396264.html
Copyright © 2011-2022 走看看