DFSstar 2024-12-06 09:10 采纳率: 85.7%
浏览 21
已结题

C++delete释放内存出错

求问:我是在vs环境下,报了crt检测到应用程序在堆缓冲区结束后写入内存的错误,这个问题在哪里呢?Dev c++没有报错

#include <iostream>
using namespace std;

int* get_arr(int* a, int size) {
    int* pa = new int[size - 1];
    for (int i = 0; i < size; i++) {
        pa[i] = a[i + 1] - a[i];
    }
    return pa;
}

int main() {
    int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int* p = get_arr(a, 10);
    
    for (int i = 0; i < 9; i++) {
        cout << p[i] << ' ';
    }
    cout << endl;
    delete[] p;
    p = NULL; 
    cout << p << endl;
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 火花20180731 2024-12-06 09:48
    关注

    size传入是10,-1后,new的数组容量是9,随后遍历数组的循环次数是10 (0,1,2,3,4,5,6,7,8,9,都<10,一共10个下标,实际pa下标取值只能是0~8),本身在循环体里访问a[i],i=9时就已经溢出了,然后你还又+1,不存在的空间怎么给你读写?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 创建了问题 12月6日