有点疑惑,c++中int*p=new int[0]动态分配了多大的内存,求不吝赐教
 int main()
{
    int *ptr=new int[0];
    ptr[0]=1;
    ptr[1]=2;
    cout<<"ptr[0]:"<<ptr[0]<<endl;
    cout<<"ptr[1]:"<<ptr[1]<<endl;
    for(int i=0;i<6;i++)
    {
        ptr[i]=i+1;

    }
    for(int i=0;i<6;i++)
    {
        cout<<ptr[i]<<"\t";

    }
    cout<<endl;
    system("pause");
    return 0;
}

访问ptr[6]程序会中断,疑惑new int[0]分配了多大的空间,在什么情况下会访问越界,在vs2013下编译的

9个回答

new分配的时候,一般会分配除了它本身大小以外的内存头和内存尾,一般形式为:[内存头][可用数据][内存尾]。
而你的ptr指针返回的是[可用数据]部分的起始地址。大部分编译器在用户分配的size为0的情况下,会自动分配1字节的可用内存,
以保证返回的ptr是一个合法的指针。但是,C/C++是一个从来都不校验内存溢出的语言。因此,你可以访问任意从ptr开始的地址的数据,
如果你访问的地址正巧有数据,则这个数据就会被访问到,如果正好这个地址没分配数据,才会抛出异常。但是如果你在ptr指向的任意地址
中写了数据,且地址已经超过了可用数据的范围,则会有两种情况发生:如果该地址没有分配数据,则你很幸运,系统会直接抛出异常。
如果该地址有数据(比如内存尾或其他分配的数据),则会让你写入,并不报任何错误,但是在程序运行到需要读取你写的数据部分时候会发生
你所以为的莫名其妙的错误。这时候要去排查错误,那可真是想死的心都有了。这也是C/C++中最难控制的部分。

new int[0] 没有意义,是错误的。C++里没有规定会怎样。就算在vs2013下编译运行了读写ptr[5]没问题,不代表其他平台如gcc、vs2015没问题。
读写ptr[x]行为就是未定义的,在vs2013中,你如果编译的是release,可能也会挂掉。

new int[0] 不分配内存,也没意义

new int[0]表示分配的数组长度为0,既不分配内存。

动态创建new 0是不分配内存的

new int[0] 0没有分配内存

只是地址指向,不会分配内存!

我在思考这个问题的时候的思路。int*pt 是创建了一个指向int类型的指针,new int,new在内存中找到一块new大小的内存将其地址分配给指针pt。我创建数组int a[0],输出sizeof(a),要知道C++中数组名即相当于数组第一个元素的位置也相当于整个数组的指针,结果输出为0,即创建了一个空数组,数组大小为0。所以我初步认为int*pt = new int[0]未分配任何内存。如果这样写这条语句则不再符合C++动态分配内存这个概念在实际编程中的应用。

首先感谢以上各位不为分数的无私赐教。int *ptr=new int[0] 这是一条无意义语句,系统并没有分配可用的空间,所以ptr指针指向的地址是随机的,和定义了一个指针却没有赋初值是一样的。程序执行的结果并不能说明什么问题。提出这个问题是在 练习复制构造函数的时候:
classname (const classname &obj) {
this->num=obj.num;
if(obj.pName!=NULL)//这里必须要做这样的判断,否则就会出现这样的问题
{
this->pName= new int[num];
}
eles
{
this->pName=NULL;
}

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
有点疑惑,c++中int*p=new int[0]动态分配了多大的内存,求不吝赐教
-
这个求组合数的程序里的fact函数,最后一部分 int i,int p······return p 这一部分是什么意思啊,有没有大神给小白讲下
-
C语言中malloc动态分配空间的使用
-
求问,为什么输入C后循环直接跳出
-
引发了未经处理的异常:读取访问权限冲突。 this->**matrix** 是 0xCDDDCDDE。
-
使用VC调用别人用Delphi做的动态库访问冲突且无法加载请问是什么原因呢?
-
C++ 构造器问题 初始化对象的时候就赋值
-
c++做的一个动态数组,出现了个问题,求大佬帮助!!
-
从5个数中找出其中最大值和最小值,为什么重复加这一句?
-
如何将以下C代码转译成MIPS 32
-
c++整数平移问题,部分代码不太懂,求助大佬们!!!
-
C++中构造函数是怎么选择的?
-
为什么c#中使用quartz执行一个定时任务(任务中使用了Parallel.For多线程)执行2个小时就会暂停一段时间?
-
求助】,有点急11111111111111 **旅店系统、床位分配问题**
-
关于字符数组剩余空间分配的问题
-
C++中指针声明时,int* p=0跟int *p=0哪个比较好?为什么?
-
在用devcpp编动态内存的时候总是出现这样的错误:[Error] ld returned 1 exit status 这是怎么回事啊,要怎么解决?
-
【求助】【求助】有点急11111111111111 **旅店系统、床位分配问题**
-
用C++实现将一串数字输入一个链表再将这个链表中的奇偶数分开存储在两个链表中,最后输出
-
请问我用函数调用的方式写多个数据求最大值的代码哪些地方有问题?
-
Linux文件操作高频使用命令
文章目录0.新建操作:1.查看操作2.删除操作3.复制操作4.移动操作:5.重命名操作:6.解压压缩操作 0.新建操作: mkdir abc #新建一个文件夹 touch abc.sh #新建一个文件 1.查看操作 查看目录: ll #显示目录文件详细信息 查看文件内容: cat|head|tail命令 cat abc.txt #查看abc的内容 head -5 abc.txt #...
程序员实用工具网站
目录 1、搜索引擎 2、PPT 3、图片操作 4、文件共享 5、应届生招聘 6、程序员面试题库 7、办公、开发软件 8、高清图片、视频素材网站 9、项目开源 10、算法 11、在线工具宝典大全 程序员开发需要具备良好的信息检索能力,为了备忘(收藏夹真是满了),将开发过程中常用的网站进行整理。 1、搜索引擎 1.1、秘迹搜索 一款无敌有良心、无敌安全的搜索引擎,不会收...
史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)
网上很多整合SSM博客文章并不能让初探ssm的同学思路完全的清晰,可以试着关掉整合教程,摇两下头骨,哈一大口气,就在万事具备的时候,开整,这个时候你可能思路全无 ~中招了咩~ ,还有一些同学依旧在使用eclipse或者Myeclipse开发,我想对这些朋友说IDEA 的编译速度很快,人生苦短,来不及解释了,直接上手idea吧。这篇文章每一步搭建过程都测试过了,应该不会有什么差错。本文章还有个比较优秀的特点,就是idea的使用,基本上关于idea的操作都算是比较详细的,所以不用太担心不会撸idea!最后,本文
我的 Input框 不可能这么可爱
作者:陈大鱼头 github: KRISACHAN &lt;input /&gt; 标签是我们日常开发中非常常见的替换元素了,但是最近在刷 whattwg 跟 MDN 的时候发现 跟 &lt;input /&gt; 有很多相关的属性,选择器都没怎么用过,所以就开篇文章来整理一下一些比较有趣或者实用的知识点。 本篇文章默认大家已经知道 &lt;input /&gt; 标签的基本用法,不会做过...
我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...
如何优雅的爬妹子网
from urllib import request import os from user_agents import ua_list import time import random import re import requests from lxml import etree class MeiziSpider(): def init(self): self.url = ‘https:/...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
文章目录前言一、nginx简介1. 什么是 nginx 和可以做什么事情2.Nginx 作为 web 服务器3. 正向代理4. 反向代理5. 动静分离6.动静分离二、Nginx 的安装三、 Nginx 的常用命令和配置文件四、 Nginx 配置实例 1 反向代理五、 Nginx 配置实例 2 负载均衡六、 Nginx 配置实例 3 动静分离七、 Nginx 的高可用集群 前言 一、nginx简介...
Mysql经典面试题及答案
需要数据库表 1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CID,Cname,TID) --CID --课程编号,Cname 课程名称,TID 教师编号 3.教师表 Teacher(TID,Tname) --TID 教师编号,Tname 教师姓名 4.成绩表 SC...
静态代理、动态代理、Spring AOP面向切面编程
目录 静态代理 列:实现静态代理 代理接口User.java 目标对象 实际业务逻辑实现方法UserImpl.java 代理类UserProxy.java 测试 动态代理 列: 实现动态代理 创建po对象 创建dao 创建代理类MyProxy.java 测试 Spring Aop 面向切面编程 列:aop练习 User.java UserDao.java My...
经典sql语句 行专列 统计部门男女人数 统计员工入职时常 根据出生日期计算年龄
1,SELECT ,COUNT() FROM dept d LEFT JOIN emp e ON d.deptno=e.deptno WHERE e.sal&lt;4000 GROUP BY d.deptno 查询部门工资低于4000的人数 2, 表数据 create table tb(姓名 varchar(10),课程 varchar(10),分数 int) insert into tb val...
讨论JAVA和QT之争
这是两种以跨平台为特色的开发方式。Qt更多被认为是一种框架,但是Qt中有新增一些C++所没有的语法,所以也可以认为是一种编程语言。Java被认为是一种编程语言,但是很多人并不知道JAVA的编程语言其实是Java SE,而他们所知的Java EE其实不是编程语言,反而是一种框架。 Qt和Java到底怎么选?没有任何明确需求的前提下,我认为尽可能使用Java,因为Java能够解决Qt不能解决的问题,...
java学习路线导航【教学视频+博客+书籍整理】
在博主认为,学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,博主将为各位保驾护航,各位赶紧冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 Java基础教学视频 Java零基础教程视频(适合Java 0基础,Java初学入门)【推荐】 JavaSE进阶入门项目实战视频教程_动力节点【推荐】 毕向东Java基础视频教程...
TCP三次握手原理
TCP协议\TCP三次握手
python 程序员进阶之路:从新手到高手的100个模块
在知乎和CSDN的圈子里,经常看到、听到一些 python 初学者说,学完基础语法后,不知道该学什么,学了也不知道怎么用,一脸的茫然。近日,CSDN的公众号推送了一篇博客,题目叫做《迷思:Python 学到什么程度可以面试工作?》,真实反映了 python 程序员在成长过程中的一些困惑。
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
Thread中的start和run方法的区别
面试必问,面试必问,面试必问!别问我为什么知道~~ 总结 run()只是Thread类的一个普通方法,调用run()并不会新建一个子线程,仍在主线程执行任务。 调用start()会新建一个子线程并执行run()的内容。调用start()会有两个线程,一个是当前正在调用start()的主线程;另一个是JVM创建的子线程,用来执行run()的内容。 实践 实践出真知~~首先写下测试代码: publ...
漫话:什么是 https ?这应该是全网把 https 讲的最好的一篇文章了
今天这篇文章,讲通过对话的形式,让你由浅入深着知道,为什么 Https 是安全的。 一、对称加密 一禅:在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客户端发送真实数据的时候,会用这把密钥对数据进行加密,客户端收到加密数据之后,用刚才收到的密钥进行解密。如图: 当然,如果客户端要给服务器发送数据,也是采用这把密钥来加密,这里为了方便,我采用单方向...
HTML CSS整理笔记
常见字体单位: 1.em 移动端常用的字体尺寸单位,说白em就相当于“倍”,比如设置当前的div的字体大小为1.5em,则当前的div的字体大小为:当前div继承的字体大小*1.5。 但当div进行嵌套时,em始终按当前div继承的字体大小来缩放。 2.rem r是root的意思,即相对于根节点html的font-size进行缩放,当有嵌套关系时,嵌套关系的元素的字体大小始终按照根节点的字体大小...
带你学系列之MySQL LIKE 子句
MySQL LIKE 子句 我们知道在 MySQL 中使用 SQL SELECT 命令来读取数据, 同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录。 WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 "runoob_author = 'RUNOOB.COM'"。 但是有时候我们需要获取 runoob_author 字段含有 "COM" 字符的所有记录,...
史上最全的mysql基础教程
启动与停止 启动mysql服务 sudo /usr/local/mysql/support-files/mysql.server start 停止mysql服务 sudo /usr/local/mysql/support-files/mysql.server stop 重启mysql服务 sudo /usr/local/mysql/support-files/mysql.server resta...
为什么你学不会递归?告别递归,谈谈我的经验
可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! 可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却不知道怎么使用,有时候还容易被递归给搞晕。也有好几个人来问我有没有快速掌握递归的捷径啊。说实话,哪来那么多捷径啊,不过,我还是想写一篇文章,谈谈我的一些经验,或许,能够给你带来一些帮助...
大学四年,分享看过的优质书籍
数据结构与算法是我在大学里第一次接触到的,当时学了很多其他安卓、网页之类的,一开始就感觉纳闷,数据结构和算法学这个有啥用,再加上上的是一所野鸡大学,老师讲的也是模模糊糊,平时做项目、练习也几乎不用数据结构,所以考试应付应付就过了,也没太在意。 到了大三的时候,面临考研和就业了,突然看到学长考研的数据结构题和面试网站的要求,突然意识到数据结构和算法的重要性,真的很重要,重要的话说三遍,真的很重要,...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
史上最全正则表达式语法,文末附常用表达式!
废话少说,直接开始学习! 一、元字符 元字符是构造正则表达式的一种基本元素。 . :匹配除换行符以外的任意字符 w:匹配字母或数字或下划线或汉字 s:匹配任意的空白符 d:匹配数字 b:匹配单词的开始或结束 ^:匹配字符串的开始 $:匹配字符串的结束 匹配有abc开头的字符串:abc或者^abc 匹配8位数字的QQ号码:^dddddddd$ 匹配1开头11位数字的手机号码...
JavaWeb--解析Servlet
什么是Servlet? Servlet(Server Applet),全称是Java Servlet。Servlet技术是Sun公司提供一种实现动态网页的解决方案,它是基于Java编程语言的Web服务器端编程技术,主要用于在Web服务器端获得客户端的访问请求信息和动态生成对客户端的响应信息。一个Servlet程序就是一个实现了特殊接口的Java类,它由支持Servlet的Web服务器(具有Ser...
一文搞懂什么是TCP/IP协议
什么是TCP/IP协议? 计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如如何探测到通信目标.由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定.不同的硬件,操作系统之间的通信,所有这一切都需要一种规则.而我们就将这种规则称为协议 (protocol). 也就是说,TCP/IP 是互联网相关各类协议族的总称。 TCP/IP 的分层管理 TCP/IP协...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
哪些 Java 知识不需要再学了
张无忌在学太极拳的时候,他爹的师父张三丰告诫他一定要把之前所学习的武功全部忘掉,忘得越多就会学得越快。 同样的,自学 Java 的时候一定要先知道哪些 Java 知识不需要再学了,毕竟技术的更新迭代就好像火箭一样快,Java 的一些知识点早已经过时了。如果不懂得断舍离,那学起来就不免太痛苦了。 1)AWT 和 Swing 真不知道为什么,有些书籍还在介绍 AWT 和 Swing,这就好像不知道大清...
相关热词 c#实现简单的文件管理器 c# where c# 取文件夹路径 c# 对比 当天 c#输入double值 c# fir 滤波器 c# 和站 队列 c#控制某个usb口开关 c# txt 去空格 c# list 批量修改
立即提问