C++用new创建动态数组输出异常:array[0]正常,array[1]输出地址
动态数组元素输出异常问题排查与解决
兄弟,我瞅了你的代码,逻辑上乍一看没啥问题,但array[1]输出内存地址而不是预期的4,大概率是这几个原因导致的:
- 变量名引发的未定义行为:你用了
_size作为变量名,在C++标准里,以下划线开头的标识符(尤其是全局作用域或者局部作用域中紧跟大写字母的)是保留给标准库使用的,虽然_size是小写开头,但仍然存在和标准库内部宏/变量冲突的风险,可能导致实际分配的数组大小不符合预期。比如如果_size被意外修改成1,那array[1]就属于越界访问,会读取到内存里的随机值(看起来像内存地址)。 - 输入有效性未校验:你提到
_size > 2,但如果std::cin >> _size执行失败(比如输入了非整数),_size的值会是未初始化的随机值,要是这个随机值小于2,同样会触发数组越界访问,输出随机内存内容。
修正后的代码示例
#include <iostream> int main() { int size; std::cout << "请输入大于2的整数:"; // 校验输入是否有效,确保size符合要求 if (!(std::cin >> size) || size <= 2) { std::cerr << "输入无效!请输入大于2的整数。" << std::endl; return 1; } int* array = new int[size]; array[0] = 13; array[1] = 4; std::cout << array[0] << std::endl; std::cout << array[1] << std::endl; // 记得释放动态分配的数组,避免内存泄漏 delete[] array; return 0; }
额外提醒
动态分配的数组一定要用delete[]释放内存,不然会造成内存泄漏。另外,日常写代码尽量避免用以下划线开头的变量名,减少踩坑的概率。
内容的提问来源于stack exchange,提问作者Lmabda3388
相关产品推荐
相关产品推荐

