在 C++ 语言中,可以使用 delete 来释放指针指向的内存空间。( )
这道题考的是C++动态内存管理的核心规则——new/delete配对。拿到题先别急着选,脑子里过一遍:指针来源是new还是malloc还是栈?delete只能救new,别的都得死,这就是坑。
很多同学看到delete就兴奋,觉得能释放指针指向的内存空间就是对的,忽略了前提条件。命题人最爱考这种绝对化表述,把delete当成万能钥匙。实际上delete只能用于new分配的内存,对普通指针或栈内存调用delete是未定义行为。选项B看似合理,实则是利用考生对C++内存模型理解不深,误以为delete是通用指针操作。
【考点】动态内存管理|指针操作|new/delete配对
GESP五级C++组重点考察面向对象与内存管理,delete属于动态内存管理核心考点。命题人放这道题,卡住的是考生对new/delete配对关系的模糊认知。
看到题先想C++内存分配机制:new申请、delete释放,二者成对使用。题干直接陈述delete的功能定义,属于基础语法记忆点。这类题的通法是回归语言规范:不是所有指针都能delete,但delete确实用于释放new分配的内存,命题人考的是概念准确性而非具体场景。new分配的内存必须用delete释放,malloc分配的内存必须用free释放,这是C++内存模型铁律。命题人考的不是具体规则,而是考生能否区分不同分配方式的对应释放函数,这是五级C++组高频考点。
陷阱在于绝对化表述。虽然delete确实能释放内存,但命题人故意省略了前提条件——delete仅用于new分配的内存,对普通指针或栈内存调用delete是未定义行为。选项B看似合理,实则是利用考生对C++内存模型理解不深,误以为delete是通用指针操作。绝对化表述是命题人最爱用的陷阱。题干说'可以使用delete来释放指针指向的内存空间',看似正确,实则忽略了delete的适用对象——它只能用于new分配的指针,对普通指针(如栈变量地址)或malloc分配的指针调用delete都会导致未定义行为。
若把条件改为malloc分配,答案就变错;若问delete能否释放栈内存,答案又错。命题人想考的是考生是否理解new/delete的配对关系,而非单纯记关键词。刷到类似题时,先问自己:这题考的是new/delete配对,还是malloc/free配对,或是其他语言特性?
【考频趋势】指针与内存考点在题库中共考过77题,覆盖6个考试级别(2007-2026);逐年分布:2007年1题、2023年13题、2024年17题、2025年25题、2026年16题、null年5题;分赛事:GESP五级22题、GESP七级18题、GESP四级17题、GESP六级16题、GESP八级3题、NOIP普及组初赛1题。从数据看,2023-2026年连续四年高频爆发,说明命题组对动态内存管理的考察力度在加大,这类概念辨析题在未来仍将是必考题。
【预测】基于给定数据,暂无足够依据预测未来具体题型变化,但可肯定的是,涉及new/delete配对关系的概念辨析题将继续保持高热度。