C++中两行动态内存分配代码有何区别?是否都创建大小为10的数组?
C++ 两种动态内存申请写法的核心差异
结论:只有第二行代码能创建长度为10的int类型数组,两行代码的作用完全不同:
- 第一行代码
int *arr = new int(10);
作用是在堆内存中申请1个int类型的存储空间,并且将这个int值初始化为10,指针arr指向这单个int的地址,完全不涉及数组分配。 - 第二行代码
int *arr = new int[10];
作用是在堆内存中申请一块连续的、可容纳10个int类型元素的存储空间,也就是长度为10的int数组,数组内的元素默认未初始化,值为随机垃圾值。
额外注意内存释放的写法差异:
单个元素申请的内存用delete arr;释放
数组申请的内存必须用delete[] arr;释放,混用会触发未定义行为,轻则内存泄漏,重则程序崩溃。
内容的提问来源于stack exchange,提问作者Yuvraj Parashar
相关产品推荐
相关产品推荐

