【发布时间】:2017-08-03 15:11:47
【问题描述】:
在 C++ 中,我的理解是 new 应该用于动态分配单个变量,而 new[] 应该用于动态分配变量数组。
但是,以下代码在 Xcode 中编译并运行良好:
#include <iostream>
int main()
{
std::cout<<"Enter length of array: ";
int length;
std::cin>>length;
int *mArray = new int;
for(int i=0;i<length;++i)
mArray[i] = i;
for(int i =0;i<length;++i)
std::cout<<mArray[i]<<std::endl;
delete mArray;
return 0;
}
为什么会这样?如果它正在访问尚未分配的内存,它不应该导致程序崩溃吗?
【问题讨论】:
-
您的写作和阅读超出了界限。如果它工作正常,你很幸运,这段代码有未定义的行为。
-
如果代码编译,那并不意味着它是正确的(参见未定义的行为)。
-
这就是使用指针管理与使用
std::vector相比的危险。 -
不是 100% 相同(代码方面)但非常接近:stackoverflow.com/questions/1239938/…
-
未定义行为是未定义。有时你很不走运,但似乎一切正常。
标签: c++ arrays pointers dynamic-memory-allocation