当前位置:  开发笔记 > 编程语言 > 正文

C++指针数组内存分配与普通数组

如何解决《C++指针数组内存分配与普通数组》经验,为你挑选了1个好方法。

我正在玩C++,我意识到指针数组和常规数组之间存在显着差异.

char *myString1 = new char[1];
char myString2 [3];

myString1[0] = 'a';
myString1[1] = 'b';
myString1[2] = 'c';
myString1[3] = 'd';

myString2[0]='a';
myString2[1]='b';
myString2[2]='c';
myString2[3]='d';

我很困惑为什么myString1编译甚至用简单的for循环打印每个字符都没有问题,即使我只是初始化初始大小为1.

但是,myString2似乎给了我编译错误,因为我初始化了一个超出数组边界的值.



1> Paulo1205..:

两者都应该导致未定义的行为.你绝对应该避免走出界限.

但请注意,这两个阵列位于不同的内存区域. myString1,在运行时动态分配,驻留在免费存储(或)中.

myString2另一方面,编译器保留其空间,可以是自动存储,也可以是静态存储.您的示例表明您正在使用自动存储,在大多数常见PC中,自动存储位于程序堆栈中.因此,当你陷入困境时myString2,你可能会破坏堆栈帧,这可能会导致多种意外结果,从而不会影响程序崩溃,从而导致静默数据损坏.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有