C++ new 数组指针的问题,感觉十分诡异

问题描述

C++ new 数组指针的问题,感觉十分诡异
char* myChar = new char[4];

myChar[0] = 'q';
myChar[1] = 'w';
myChar[2] = 'e';
myChar[3] = 'r';
myChar[4] = 't';
myChar[5] = '';

cout << myChar;

输出: qwert
竟然能正确的赋值和输出,可是这不是明显的越界了啊。难道c++没有防止越界的机制?这里的myChar变大了?

解决方案

越界是肯定的。但是由于越界的范围比较小,有时确实不会出错。
C++ 确实没有防止越界的机制,这个需要自己的代码来控制。
myChar 不会自动变大的。

解决方案二:

c++没有防止越界的机制,这里的myChar没有变大

解决方案三:

是越界了。这样做是存在风险的,C++没有防止越界的机制,需要代码控制。希望能够帮助你。

解决方案四:

myChar数组没有变大,只不过你越界使用了其他地址空间。

解决方案五:

myChar没有变大,只不过myChar[5]自动向后多取了一个字节,C++不保证是否越界的,开发者需要自己进行维护。
所以,在开发过程中一定要注意所申请数组的容量,防止越界。

解决方案六:

越界了。但是你运气好,刚好后面的地址可以访问。让你凑巧可以拿到正确结果
这就是c++的威力。可以让你访问,给予足够灵活性,当然也带来一些风险就是使用不当的话。会出现各种错误。

时间: 2024-09-12 03:48:25

C++ new 数组指针的问题,感觉十分诡异的相关文章

ios-避免数组指针出现崩溃问题

问题描述 避免数组指针出现崩溃问题 如果在访问每个指针之前检查数组指针,像下面的代码中,是不是可以避免数组出现崩溃?会不会出现其他问题? -(BOOL)checkIndexAvailability:(NSArray *)array_ withIndex:(int)index_ { if ((array_.count-1)>=index_) { return TRUE; } return FALSE; } 在访问数组时的调用方式: if ([self checkIndexAvailability:

Php核心技术-数组指针

  数组指针的操作: 移动数组指针的操作: Next() 向下 同时会获得当前元素的值. Prev() 向上同时会获得当前元素的值. End() 移动到最后一个元素单元 获得最后一个元素的值 Reset() 移动到第一个单元 获得第一个元素的值. 如果移动不成功,返回false. 参数都为需要操作的数组,并且是引用传递.   获得指针指向的元素的信息: Key();//获得当前数组指针指向的元素下标 Current();//获得当前数组指针指向的元素 只获取数据 不移动指针 还有一个混合的操作:

C/C++中多维数组指针作为函数参数传递

注意此题的意思在于输入3个同4门课的成绩,计算出平均值和显示其中一个同学的4门课成绩,此例是对多维数组指针和多维数组的指针作为涵数参数传递的总结,认真联系和体会可以很好的了解多维数组指针的概念到底是什么! #include <stdio.h> main() { void search_score(); /* 定义自定义涵数类型为不返回型 */ void count_avg(); /* 定义自定义涵数类型为不返回型 */ static float a[3][4]={{97,45.5,66,77}

C语言数组指针的小例子

1.功能:输入6个学生的5门课程成绩,计算出每个学生的平均分和每门课程的平均分. 2.C语言实现代码:(其实就是用二维数组来实现的,二维数组的引用传递使用数组指针来完成) 复制代码 代码如下: #include <stdio.h> #define STUDENT 5 #define SCORE 6 void input_array(float (*score)[STUDENT]); void avg_score(float (*score)[STUDENT]); void avg_course

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+   指针数组: 在一个数组中,如果它的元素全部都是指针

C++中的指针、数组指针与指针数组、函数指针与指针函数

C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从初学者的角度,深入浅出地详解什么是指针.如何使用指针.如何定义指针.如何定义数组指针和函数指针,并给出对应的实例演示:接着,区别了数组指针与指针数组.函数指针与指针函数:最后,对最常混淆的引用传递.值传递和指针传递做了区处. C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力.指针可以用于数组.或作为函数的参数,用来访问内存和对内存的操作,指针的使用使得C++很高效,但是指针也非常危险,使用不当会带来比较

c语言-数组指针指向数组的问题

问题描述 数组指针指向数组的问题 int main() { char a[5]={'A','B','C','D'}; char (*p3)[10] = &a; char (*p4)[10] = a; return 0; } int main() { char a[5]={'A','B','C','D'}; char (*p3)[3] = &a; char (*p4)[3] = a; return 0; } 这两个式子怎么理解啊?貌似指针这样指有点问题,面试题上看到的,也是醉的不行.p3+1

c语言数组指针,不报错,就停止工作,请问哪里错了

问题描述 c语言数组指针,不报错,就停止工作,请问哪里错了 第一次提问,多包含,也不报错,为什么一运行就按停止工作报错 #include #include #include struct arr { int *pbase;//第一个元素的首地址 int len;//数组所能容纳的最大元素个数 int cnt;//当前数组有效元素个数 }; void init_arr(struct arr *p1,int length) { (p1->pbase) = (int *)malloc(sizeof(i

c++ 指针-C++中数组指针怎么输出每一个所谓的一维数组的头一个元素

问题描述 C++中数组指针怎么输出每一个所谓的一维数组的头一个元素 #includeusing namespace std;int main(){int a[3][4] = {{1357}{9111315}{17192122}};int (* p)[4];for(p = a; p < a + 3; p++){cout << ((p + 0)) << "" "";cout << *p <<endl;}cout &l