函数域中申请堆空间出函数后不会自动释放

#include<iostream>
using std::cout;
using std::endl;


char *scat(char *s1,char *s2)
{
 char *s=new char[strlen(s1)+strlen(s2)+1];
 strcpy(s,s1);
 strcat(s,s2);
 return s;//返回刚申请的堆空间的首址,出了函数后变量s就不复存在了,但申请的空间仍在
 //这很危险,容易造成内存泄露,因为有的人认为在函数中为局部变量申请的堆空间,出了函数后
 //会自动释放,这是不正确的
}
void main()
{
 char str1[]="hello";
 char str2[]="Jim";

 char *str3=scat(str1,str2);

 cout<<str3<<endl;

 str3[0]='x';
 cout<<str3<<endl;

 delete [] str3;//释放堆空间

}

结果:helloJim

            xelloJim

地址返回可以为int类型

#include<iostream>
using std::cout;
using std::endl;


int scat(char *s1,char *s2)
{
 char *s=NULL;
 s=new char[strlen(s1)+strlen(s2)+1];
 strcpy(s,s1);
 strcat(s,s2);
 return (int )s;//返回刚申请的堆空间的首址,出了函数后变量s就不复存在了,但申请的空间仍在
 //这很危险,容易造成内存泄露,因为有的人认为在函数中为局部变量申请的堆空间,出了函数后
 //会自动释放,这是不正确的
}
void main()
{
 char str1[]="hello";
 char str2[]="Jim";


 char *str3=(char *)scat(str1,str2);

 cout<<str3<<endl;

 str3[0]='x';
 cout<<str3<<endl;

 delete [] str3;//释放堆空间

}

结果:helloJim

            xelloJim


3、


#include<iostream>
using std::cout;
using std::endl;


int scat(char **s1,char **s2)
{
 char *s=NULL;
  s=new char[strlen(*s1)+strlen(*s2)+1];
 strcpy(s,*s1);
 strcat(s,*s2);
 return (int )s;
}

void main()
{
 char *str1="hello";


 char *str2="Jim";


 char *a="x";

 char *str3=(char *)scat(&str1,&str2);

 cout<<str3<<endl;

 str3[0]='x';
 cout<<str3<<endl;

 delete [] str3;//释放堆空间

}






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

/home文件夹重新划分独立分区

1. 备份home文件夹&#xff0c;数据丢失的时候可以使用cp -av /home/* /data/2. 磁盘分区2.1 虚拟机中添加磁盘并让系统识别&#xff0c;使用# echo - - - >> /sys/class/scsi_host/host0/scan# echo - - - >> /sys/class/scsi_host/host1/scan# echo - - - >…

使用halcon将一个圆上的点拟合成圆形并且求出圆心

我们在自动化贴装机标定过程中&#xff0c;需要计算吸头的旋转中心位置。我们一般使用的方法是使用模板匹配&#xff0c;做一个模板&#xff0c;吸头旋转一个角度寻找模板一次&#xff0c;通过多次旋转求取吸头的旋转中心。 使用halcon实现 public bool FitCircle(double[] X…

This 指针

如果你期望衍生类别重新定义一个成员函数&#xff0c;那么你应该在基础类别中把此函数设为 virtual。 以单一指令唤起不同函数&#xff0c;这种性质称为Polymorphism&#xff0c;意思是"the ability toassume many forms"&#xff0c;也就是多态。 虚拟函…

史上最全亚历山大大帝名言

&#xff08;1&#xff09;把财富分给他人&#xff0c;把希望留给自己&#xff0c;他将带给我无穷的财富。——亚历山大大帝 &#xff08;2&#xff09;山不走到我这里来&#xff0c;我就走到他那里去。——亚历山大大帝 &#xff08;3&#xff09;能够战胜恐惧就能战胜死亡。—…

jdbcmysql

做java开发难免会用到数据库,操作数据库也是java开发的核心技术。那我们现在就来谈谈javajdbc来操作mysql数据库吧 第一步&#xff1a;我们需要把mysql的驱动引进来这里引驱动就是把mysql-connector-java-5.1.37-bin.jar加到项目中来&#xff0c;下面附jar包 第二步&#xff1a…

char **p, char a[16][8]; 问:p=a 是否会导致程序在以后出现问题?为什么?

int (*v)[10]; 在 Visual C 里面不能与 int **v 等同起来。 举个例子&#xff1a; int **p; int (*v)[10]; int a[10][10]; 如果写 v a 是可以的。 如果写 p a 将会引起一个类型不匹配的编译错误。 二级指针&#xff08;int **p&#xff09;需要自己指向一个一级指针&#x…

draw_circle_mod预生成交互式圆形

目录draw_circle_mod&#xff08;算子&#xff09;描述参数draw_circle_mod&#xff08;算子&#xff09; draw_circle_mod - 圆的交互式绘图。 draw_circle_mod&#xff08;:: WindowHandle&#xff0c;RowIn&#xff0c;ColumnIn&#xff0c;RadiusIn&#xff1a;Row&#…

川崎机器人c#通讯(转)

由于本人在工业自动化行业做机器视觉的工作&#xff0c;所以除了图像处理方面要掌握外&#xff0c;还需要与工业机器人进行通信。最近学习了计算机与川崎机器人的TCP/IP通信&#xff0c;于是在这里记录一下。 除了直接与机器人通信外&#xff0c;有一种方式是通过PLC间接通信&a…

模板类 Template Classes 以及模板类编译时的处理

&#xfeff;&#xfeff;我们可以建立template classes&#xff0c;使它们能够神奇地操作任何类型的资料。下面这个例子是让CThree 类别储存三个成员变量&#xff0c;成员函数Min 传回其中的最小值&#xff0c;成员函数Max 则传回其中的最大值。我们把它设计为template class&…

行转列及列转行查询

开发过程中常遇到行转列或是列转行的问题&#xff0c;即需要将数据库中一张表信息进行行转列操作&#xff0c;再将每列&#xff08;即每个字段&#xff09;作为与其他表进行联表查询的字段进行显示。 一、行转列&#xff1a;将原来同一列下多行的不同内容作为多个字段&#xff…

移动端系列讲解之字体单位

移动端字体单位有哪些&#xff1f;他们的兼容性如何&#xff1f;他们的特点&#xff1f;1.移动端字体单位现在主要有 em 、rem 、px 2.兼容性请传送点击这里 em: em是相对长度单位。相对于父元素设置的字体大小。em相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸…

x264_param_t参数注解

typedef struct x264_param_t { CPU 标志位 unsigned int cpu; int i_threads; 并行编码多帧 int b_deterministic; 是否允许非确定性时线程优化 int i_sync_lookahead; 线程超前缓冲 视频属性 int i_width; 宽度 int i_height; 高…

gen_circle_contour_xld创建圆或圆弧的XLD轮廓

目录gen_circle_contour_xld&#xff08;算子&#xff09;描述参数gen_circle_contour_xld&#xff08;算子&#xff09; gen_circle_contour_xld - 创建圆或圆弧的XLD轮廓。 gen_circle_contour_xld&#xff08;&#xff1a;ContCircle&#xff1a;Row&#xff0c;Column&am…

一、Java语言基础(4)_方法和数组——数组

2018-04-25 不悔梦归处&#xff0c;只恨未尽心 数组 一、一维数组 数组的含义&#xff1a;具有相同类型的多个变量按有序形式组织起来的数据形式。&#xff08;数组是用来存储固定大小的同类型元素。&#xff09;数组的定义&#xff1a;方式1&#xff08;推荐使用&#xff09;&…

http header 具体解释

HTTP&#xff08;HyperTextTransferProtocol&#xff09;即超文本传输协议&#xff0c;眼下网页传输的的通用协议。HTTP协议採用了请求/响应模型&#xff0c;浏览器或其它client发出请求&#xff0c;server给与响应。就整个网络资源传输而言&#xff0c;包含message-header和me…

研究生开题报告需要注意的几点

&#xfeff;&#xfeff;1 毕业论文选题的原则 毕业论文选题一般要求满足以下原则&#xff1a; ①开拓性:前人没有专门研究过或虽已研究但尚无理想的结果&#xff0c;有待进一步的探讨和研究&#xff0c;或是学术界有分歧&#xff0c;有必要深入研究探讨的问题&#xff1b;…

create_metrology_model创建测量几何形状所需的数据结构(原理)

目录create_metrology_model&#xff08;算子&#xff09;描述二维计量的基本原理创建计量模型数据结构提供近似值修改模型参数修改对象参数对齐计量模型应用测量访问结果清理记忆注意参数create_metrology_model&#xff08;算子&#xff09; create_metrology_model - 创建测…

X264码率控制流程分析

码率控制的理论知识&#xff1a;码率控制的目的和意义&#xff1a;图像通信中码率控制的目的&#xff1a;通过调节编码参数&#xff0c;控制单位时间内的编码视频流的数据量&#xff0c;以使产生的比特流符合各种应用的需求。视频压缩的效率和视频内容有很大的关系&#xff0c;…

STL-list

#include "stdafx.h"#include<iostream>#include<string>#include<vector>//vector向量容器#include<deque>#include<list>#include<algorithm>using namespace std;/* list介绍 list容器实现了双向链表的数据结构&#xff0c;数…

Java微信二次开发(九)

多媒体文件上传与下载 第一步&#xff1a;找到包com.wtz.vo&#xff0c;新建类WeixinMedia.java 1 package com.wtz.vo;2 3 /**4 * author wangtianze QQ:8646200125 * date 2017年4月25日 上午11:10:316 * <p>version:1.0</p>7 * <p>descri…