MST

星途 面试题库

面试题:C++中数组越界与指针悬挂问题示例分析

请分析以下C++代码中可能存在的数组越界和指针悬挂问题,并说明原因。 ```cpp #include <iostream> int* createArray() { int arr[5] = {1, 2, 3, 4, 5}; return arr; } int main() { int* ptr = createArray(); for (int i = 0; i < 6; ++i) { std::cout << ptr[i] << std::endl; } return 0; } ```
47.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 数组越界问题
    • main函数中,for循环for (int i = 0; i < 6; ++i),而createArray函数返回的数组arr实际大小为5。
    • i等于5时,ptr[5]访问的内存位置超出了数组arr的有效范围,导致数组越界。因为数组的有效索引范围是从0到4(数组大小为5)。
  2. 指针悬挂问题
    • createArray函数中,arr是一个局部数组,其生命周期在函数结束时就结束了。
    • createArray函数返回arr指针时,arr数组所占用的栈空间被释放。
    • 然而在main函数中,ptr仍然指向这个已经释放的内存空间,这就导致了指针悬挂问题。后续通过ptr访问内存会导致未定义行为。