c++ - 为什么 delete[] 在这里抛出异常?
问题描述
我正在尝试实现合并排序算法,但我不知道为什么delete[] right
会引发异常:
Invalid address specified to RtlValidateHeap
.
删除该行可以解决问题,但这会造成内存泄漏,对吗?delete[] left
这里不会造成问题。
void Merge(int data[], int from, int middle, int to)
{
int leftLength = middle - from + 1;
int rightLength = to - middle;
int* left = new int[leftLength + 1];
int* right = new int[rightLength + 1];
for (int i = 0; i < leftLength; i++)
{
left[i] = data[from + i];
}
for (int i = 0; i < rightLength; i++)
{
right[i] = data[middle + i + 1];
}
left[leftLength] = INT_MAX;
right[rightLength] = INT_MAX;
int leftPointer = 0;
int rightPointer = 0;
for (int i = from; i <= to; i++)
{
if (left[leftPointer] < right[rightPointer])
{
data[i] = left[leftPointer];
leftPointer++;
}
else
{
data[i] = right[rightPointer];
right++;
}
}
delete[] left;
delete[] right;
}
解决方案
指针right
由行改变
right++;
执行该行后,right
不再是通过分配的指针new[]
,因此将其传递给delete[]
是非法的。
该行应更改为
rightPointer++;
就像你在增加leftPointer
而不是left
在上一行一样。
推荐阅读
- python - 多标签图像分类训练预训练 CNN 期间的学习问题
- node.js - Vue - 创建新项目失败
- python - | 不和谐.py | 我正在为我的服务器制作一个 24/7 吟唱机器人,但出现此错误:UnboundLocalError: local variable 'ss' referenced before assignment
- pine-script - 需要使用我的 pine 脚本代码一次只执行一个订单
- javascript - 如何正确使用 nodejs 肥皂
- flutter - 在同一天为每个班级颤振重复的本地通知
- python - Python - 忽略不可解析的字符串
- python - 如何将看起来像 DIct 的列表转换为真正的 dict
- youtube-api - YouTube API 将视频上传到不同的 YouTube 帐户
- fortran - 在 Fortran 中将派生类型的指针分配给相同类型的目标