`
jgsj
  • 浏览: 962839 次
文章分类
社区版块
存档分类
最新评论

关于New字符数组时初始化现象

 
阅读更多

在用new分配空间时要特别注意初始化现象。也许会因为初始化而使得内存不能用。
例如下面代码的操作就会出现异常。
char * str;
str=new char[5]="abc";
str[1]='a';//出现异常
delete str;//出现异常(轮不到这个异常)
经过测试:
str[0]='a';//也会出现异常
所以我猜测:
str=new char[5]="a";并没有去申请一个5个字符的内存空间,然后初始化为"a"。而是提取了"a"的首地址返回。因为"a"是一个常量,str[1]='a'和delete str自然就会出现异常。
这种情况又相当于char * str="abc" 与 char str[]="abc"情况不同.后者会给str分配一个四字节的空间,并且其内容可以改变。
如何证明str=new char[5]="abc"与"abc"指向同一个内存呢?
看如下代码:
char string[5]="abc";
char * str;
str=new char[5]=string;
str[1]='a';
cout<<string<<endl;
这样输出的结构为:aac,改变了原来的字符串。

分享到:
评论

相关推荐

    Java数组讲解

    //在定义数组时,如果确定数组的各个元素,可以进行静态初始化 ,在创建数组时,给数组元素赋初值 int [] data2 = new int[] {34,56,765,78}; //注意静态初始化时,不需要指定数组的长度 //通过foreach循环遍历, 增强的...

    详解C#编程中一维数组与多维数组的使用

    一维数组 可按下面的示例所示声明五个整数的...数组初始化 可以在声明数组时将其初始化,在这种情况下不需要级别说明符,因为级别说明符已经由初始化列表中的元素数提供。例如: int[] array1 = new int[] { 1, 3, 5,

    JavaScript jQuery 中定义数组与操作及jquery数组操作

    首先给大家介绍javascript jquery中定义数组与...此时为a已经开辟了内存空间,包含10个元素,用数组名称加 [下标] 来调用,例如 a[2] 但此时元素并未初始化,调用将返回 undefined 以下代码定义了个可变数组,并进行赋

    第三章JAVA 中的数组及字符串.doc

    数据的初始化有二种形式工:定义是赋值,或初始化(NEW运算后)赋值二种形式。 数据也是对象。 数组的copy; 如:int a[]=new int[10]; int b[]=new int[10]; for(int i=0;i;i++)a[i]=i; for(int i=0;i;i+...

    Fouryxy.zip

    x在提供数组初始化器时不能定义维度表达式 int[] numbers = new int[3]; int[] numbers = new int[3]; numbers[numbers.Length] = 42; x int[][] numbers = {{ 42, 84 }, { 84, 42 }}; 5、已知数组为...

    fukangwei#New_Blog_MarkDown#C字符串1

    下面创建一个字符串"Hello",由于在数组的末尾存储了NUL,所以字符数组的大小比单词"Hello"的字符数多1:根据数组初始化规则,可以把上面的语句写成如下

    C#分隔字符串时遭遇空值

    在C#中分隔字符串时,按特定字符进行分隔的时候可能会遇到空值,如何我现在传入的是Id的字符串,如:"1501,1502,1503,,1505",以逗号分隔,由于各种原因,导致传入的字符串中有连续的逗号,如果我要利用这一串...

    新概念C语言.李一波(带详细书签).pdf

    7.4.2 字符数组的初始化 54 7.4.3 字符数组的引用 54 7.4.4 字符串与字符串结束标志 55 7.4.5 字符数组的输入输出 56 7.4.6 字符串处理函数 58 7.4.7 字符数组应用举例 60 习题 61 第8章 文件 63 8.1 C语言...

    javascript的数组和常用函数详解

    此时为a已经开辟了内存空间,包含10个元素,用数组名称加 [下标] 来调用,例如 a[2] 但此时元素并未初始化,调用将返回 undefined。以下代码定义了个可变数组,并进行赋值。 代码如下:var a = new Array();a[0] = 10...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    7.3.2 字符数组的初始化 89 7.3.3 字符数组的引用 90 7.3.4 字符串和字符串结束标志 91 67.3.5 字符数组的输入输出 91 7.3.6 字符串处理函数 92 7.4 程序举例 94 本章小结 97 8 函 数 8.1 概述 98 8.2 函数定义的...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    7.3.2 字符数组的初始化 89 7.3.3 字符数组的引用 90 7.3.4 字符串和字符串结束标志 91 67.3.5 字符数组的输入输出 91 7.3.6 字符串处理函数 92 7.4 程序举例 94 本章小结 97 8 函 数 8.1 概述 98 8.2 函数定义的...

    Visual C++开发实战1200例 第3章

    实例080结构体变量的初始化 实例081如何使用嵌套结构 实例082将结构作为参数传递并返回 实例083共用体数据类型的定义 实例084共用体变量的初始化 实例085如何使用匿名共用体 实例086枚举类型的定义与使用 实例087用...

    Ruby中数组的一些相关使用方法

    Ruby数组是有序的,任何对象的??整数索引的集合。...有许多方法来创建或初始化一个数组。一种方式是 new 类方法: names = Array.new 可以设置一个数组的大小,在数组创建的时候: names = Array.new

    零起点学通C++多媒体范例教学代码

    14.15 字符数组 14.16 重载数组下标操作符 14.17 总结 第15章 链表 15.1 声明链表结构 15.2 简单的图书链表 15.2.1 图书链表 15.2.2 类的链表 15.3 动态链表 15.3.1 动态链表的建立 15.3.2 解决输入字符造成死循环...

    零起点学通C++学习_多媒体范例教学代码

    14.15 字符数组 14.16 重载数组下标操作符 14.17 总结 第15章 链表 15.1 声明链表结构 15.2 简单的图书链表 15.2.1 图书链表 15.2.2 类的链表 15.3 动态链表 15.3.1 动态链表的建立 15.3.2 解决输入字符...

    使用node.js中的Buffer类处理二进制数据的方法

    第一种:直接使用一个数组来初始化缓存区 var arr = [0,1,2] var buf = new Buffer(arr) console.log(buf) 执行效果: 第二种:直接使用一个字符串来初始化缓存区 var str = 'hello' var buf = new Buffer(str...

    程序员面试刷题的书哪个好-New-Blood:图像处理新血液

    什么是字符数组,什么是字符串,有区别吗? 以上建议 10 天以内复习彻底 你能说出函数的调用,函数的参数,函数的申明,函数的返回值是怎么样的概念吗?你编写过递归函数吗? 什么叫指针,什么叫地址,什么叫指针...

    jsmap数据结构.pdf

    初始化 初始化map对象的三种⽅式 对象的三种⽅式 // 初始化map的三种⽅式 const map1 = new Map() map1.set(60, '及格') map1.set(80, '良') map1.set(90, '优秀') // 第⼆种⽅式 set⽅法返回的是当前map对象,因此...

    01 basicday01

    B 初始化times C “获得”用户输入的 数据input D times++ E “检查”answer 和 input 的匹配情况 {数量,位置} F “提示”检查结果(times,数量,位置) G 如果检查结果是 5 5 游戏就结束了! H 返回 C 4) ...

Global site tag (gtag.js) - Google Analytics