首页 > 解决方案 > 如何修复对象在被释放后可能修改的 malloc 错误

问题描述

我正在使用 new(malloc) 来 malloc 一个数组,但是有一个错误,即对象在被释放后被修改

void merge(int low, int high)
{
    int *tmp = new int[high-low+1];
    // int *tmp = (int*) malloc (sizeof(int) * (high-low+1));
    int mid = (low + high) / 2;
    int i = low, j = mid + 1, k = low;
    while (i <= mid && j <= high)
    {
        if (A[i] < A[j]) tmp[k++] = A[i++];
        else             tmp[k++] = A[j++];
    }
    while(i <= mid) tmp[k++] = A[i++];
    while(j <= high) tmp[k++] = A[j++];
    for (int t = low; t <= high; t++) A[t] = tmp[t];
    delete[] tmp; 
    // free(tmp);
}

malloc:释放对象 0x7fb880402ab0 的校验和不正确:可能在释放后修改。损坏值:0x300000000 malloc:*** 在 malloc_error_break 中设置断点进行调试

标签: c++

解决方案


错误可能是由于tmp[k++]它超过了tmp.


推荐阅读