这是我的代码,我不知道它有什么问题,为什么不能用新的堆内存?
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;
}
答案 0 :(得分:3)
此代码失败,因为它尝试将左值引用返回到右值。 (new
的结果是右值)。
最简单的解决方法是让函数返回int *
。
如果没有此修复,return B;
也会导致未定义的行为,因为您已返回对局部变量的引用。