我正在尝试在函数中新内存新堆内存,但它会出错

时间:2014-10-08 11:29:05

标签: c++ visual-c++ c++11 heap-memory

这是我的代码,我不知道它有什么问题,为什么不能用新的堆内存?

int*& mergeSort(int* A, int N) {
    if (N == 1) {
        return new int(A[0]); //error
    }

    int mid = N / 2;

    int* A1 = mergeSort(A, mid);
    int* A2 = mergeSort(A + mid, N - mid);

    int* B = merge(A1, mid, A2, N - mid);

    delete []A1;
    delete []A2;

    return B;
}

1 个答案:

答案 0 :(得分:3)

此代码失败,因为它尝试将左值引用返回到右值。 (new的结果是右值)。

最简单的解决方法是让函数返回int *

如果没有此修复,return B;也会导致未定义的行为,因为您已返回对局部变量的引用。