GESP 四级 · GESP 202506 C++ 四级 第 3 题

选择题 · 答案 D

← 整套速查表 GESP 四级 全部真题

题目

在 C++ 中,int arr[3][4] 和 int* arr = new int[12] 均可模拟一个 3 行 4 列的二维数组。关于这两种方式,下面说法错误的是( )。

答案:D

解题思维

答案D。二维数组在内存中按行优先连续存储。int array[5][3]中元素按array[0][0]到array[4][2]的顺序连续排列。

常见错误

二维数组按行优先存储。计算偏移量先确定每行元素个数再乘行号+列号。

详细解析(节选)

【考点】Stack vs. Heap | Memory Continuity | Automatic vs. Manual Management

🎯 考纲定位:堆栈分配机制与内存管理(GESP 四级 C++ 核心考点)。命题人专攻"自动释放"的认知盲区,90% 考生误以为所有数组都能自动回收。

🧠 解题思维:先锁定存储位置(栈/堆)→ 判断内存连续性(数组布局)→ 核对释放方式(栈自动/堆需 delete[])。选项 A/B 考位置,C 考布局,D 考生命周期,层层递进。栈数组随作用域结束自动回收,堆数组必须手动 delete[]。

🪤 陷阱拆解:A 项"栈上分配"正确;B 项"堆上分配"正确;C 项"连续"正确(二维数组本质是一维内存);D 项"都能自动释放"是致命错误——栈数组随作用域结束自动回收,但 new 分配的堆内存必须手动 delete[],否则必内存泄漏。

🔄 反命题思维:把 new 改成 malloc 或调整数组大小,就能考"堆栈溢出"或"动态内存池";把"自动释放"改成"生命周期",就能考全局变量与局部变量区别。刷到此类题,先问"命题人想考我什么"。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断