gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:37 25 4
gpt4 key购买 nike

我在玩 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 似乎给我编译错误,因为我初始化了一个超出数组边界的值。

最佳答案

两者都应该导致未定义的行为。您绝对应该避免越界。

但是请注意,这两个数组位于不同的内存区域。 myString1 在运行时动态分配,驻留在空闲存储(或)中。

另一方面,

myString2 的空间由编译器保留,无论是自动存储还是静态存储。您的示例表明您正在使用自动存储,在我们大多数常见的 PC 中,自动存储位于程序堆栈中。因此,当您弄乱 myString2 时,您有可能破坏堆栈帧,这可能会导致多种意外结果,从无效到程序崩溃,再到静默数据损坏。

关于C++ 指针数组内存分配与普通数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34235707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com