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

关于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,改变了原来的字符串。

分享到:
评论

相关推荐

    VB 数组的初始化实例

    虽然这不是标准的数组初始化,但它们在处理可变大小的数据集时非常有用。例如,使用`ArrayList`: ```vb Dim list As New ArrayList() list.Add("Value1") list.Add("Value2") ' 然后可以将列表转换为数组 Dim ...

    C语言中关于字符数组与字符指针

    字符数组初始化为字符串常量时,会在内存中存储字符串的副本。而使用字符指针指向字符串常量,则编译器会将其存放在只读的程序数据段。 6. sizeof操作符的使用 使用sizeof操作符时,字符数组和字符指针的结果也不同...

    字符数组与字符指针

    - **字符数组**初始化: ```c char string[] = "This is a string."; ``` - **字符指针**初始化: ```c char *str = "This is a string."; ``` ##### 2. 修改 - **字符数组**: ```c char string[] = "This...

    C语言中二维字符数组.pdf

    这种方式可以将字符串数组初始化为指针数组,使得后续操作更加灵活。 在使用二维字符数组时,需要注意字符串的个数是确定的,但是字符串的长度是可变的。同时,在定义二维字符数组时,需要注意const关键字的使用,...

    输入10个字符串到一个字符串数组

    - **数组初始化**:`str[i] = scanner.next();` 从用户处接收输入并将其存储在数组中。 #### 3.2 遍历数组 - **for 循环**:使用 for 循环遍历数组。例如,`for (int i = 0; i ; i++)` 用于遍历整个数组。 - **数组...

    C语言中二维字符数组[文].pdf

    - 初始化动态分配的二维字符数组时,如果遇到问题,可能是因为没有正确地为每个字符串分配内存,或者在赋值过程中忽略了字符串的长度。例如,`str=str1[i][j];`这一步可能需要加上适当的内存分配,确保`str`可以...

    字符串数组.zip

    接着,我们可以逐个初始化或赋值数组元素: ```csharp stringArray[0] = "Hello"; stringArray[1] = "World"; // ... ``` 描述中没有提供具体的知识点,但我们可以推断它可能涉及到字符串数组的基本概念、操作以及...

    编程题3_1对象数组初始化[借鉴].pdf

    在软件开发中,对象数组初始化是一种常见的编程技术,特别是在设计学生信息管理系统时。在本文中,我们将讨论如何设计 Student 类,实现对象数组的初始化和成员函数的使用。 Student 类设计 在设计 Student 类时,...

    js二维数组定义和初始化的三种方法总结

    在实际开发中,合理地定义和初始化二维数组是非常重要的。接下来,我们将详细了解和总结三种在JavaScript中定义和初始化二维数组的方法。 首先,方法一是一种直接定义并初始化二维数组的方式。这种方式适用于二维...

    C#实现char字符数组与字符串相互转换的方法

    在C#编程中,字符数组(char[])和字符串(string)是两种常见的数据类型,它们在处理文本信息时有着广泛的应用。理解如何在两者之间进行转换是非常重要的。本篇文章将详细阐述C#中实现char字符数组与字符串相互转换...

    JAVA数组与字符串详解[借鉴].pdf

    要让系统为数组分配存储空间,必须指出数组元素的个数,该工作在数组初始化时进行。 数组的初始化工作可以通过new操作符完成,也可以通过给元素赋初始值进行。 1)用new初始化数组 用new关键字初始化数组,只指定...

    C#初始化数组的方法小结

    这里,`arrayA`被声明为一个包含三个字符串元素的数组,并直接用花括号内的值进行初始化。 2. **分开声明和初始化**: 先声明数组,然后使用`new`关键字来初始化。 ```csharp string[] arrayB; arrayB = new ...

    字符串数组操作类

    这里首先创建了一个包含两个字符串 `"jiang"` 和 `"cui"` 的数组 `ss`,然后使用这个数组初始化了 `StringArray` 类的一个实例 `str1`。 #### 2. 添加元素 ```csharp str1.AddAt("zou", 0); // 在索引0处添加 "zou...

    Java数组初始化时内存分配情况解析.pdf

    数组初始化时,Java会为数组的所有元素分配内存,并根据初始化列表为每个元素赋予初始值。对于未初始化的数组,如`int[] b = new int[5];`,虽然在堆上分配了足够的空间,但元素的初始值默认为该类型的默认值(如int...

    vc++6.0中动态数组实现(例如string类对象数组等)[文].pdf

    动态分配数组时,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化。如果数组元素是内置类型,则无初始化。例如: ```cpp string *psa = new string[10]; // array of 10 empty strings int *pia = new ...

    java代码-例子4-7 用字符数组初始化String对象

    通过理解如何使用字符数组初始化String对象,开发者可以更好地理解和控制内存管理,特别是在处理大量文本数据或需要避免不必要的对象创建时。这不仅有助于提高代码效率,也有助于培养良好的编程习惯。因此,深入学习...

    Java数组练习题(带答案).doc

    包括数组的访问、数组的复制、数组的初始化、数组的下标、数组的长度、数组的存储、数组的下标越界、数组的元素类型、数组的默认值、数组的大小、数组的元素访问、数组的二维数组初始化、数组的复制方法、数组的访问...

    java 数组和字符串

    在顾客消费管理系统的设计中,不仅展示了如何创建和引用数组,还深入实践了对象数组的使用,以及通过循环和条件语句来实现对象数组的初始化和数据的动态管理。 #### 总结与反思 本次实验通过实际操作,加深了对...

    Android String字符串数组动态增加

    2. **初始化ArrayList**: 如果需要从XML资源中的字符串数组初始化,可以使用Resources类的getStringArray()方法。 ```java String[] predefinedArray = getResources().getStringArray(R.array.my_string_array); ...

Global site tag (gtag.js) - Google Analytics