存在内存访问异常,但我不确定我的代码中出了什么问题
There's a memory access exception but I'm not sure what's wrong in my code
我正在测试视觉工作室中的一些快速排序情况,但是我得到了错误,我不确定我的代码出了什么问题。
这是我的代码。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void Swap(int *arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
void BubbleSort(int *arr, int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
Swap(arr, j, j + 1);
}
}
}
}
void QuickSort(int *arr, int left, int right) {
if (left >= right) {
return;
}
int pivot = arr[left];
int low = left;
int high = right + 1;
while (low <= high) {
while (arr[++low] <= pivot && low <= right);
while (arr[--high] >= pivot && high > left);
if (low > high) {
Swap(arr, left, high);
}
else {
Swap(arr, low, high);
}
}
QuickSort(arr, left, high - 1);
QuickSort(arr, high + 1, right);
}
int main() {
srand((unsigned)time(NULL));
int *arr = new int[10000];
for (int i = 0; i < 10000; i++) {
arr[i] = rand() % 10000;
}
BubbleSort(arr, 10000);
QuickSort(arr, 0, 9999);
delete[] arr;
return 0;
}
如果我分配的内存很小也没关系但是这段代码的情况在我的 QuickSort(( 函数中出现了错误。
当pivot
是最大的元素时,第一个内部while
循环将运行,直到++low
> right
,导致数组越界访问。在访问arr[++low]
之前,您必须检查low < right
。同样的事情也适用于第二个循环。
此外,使用 std::swap
而不是滚动自己的,使用 std::size_t
作为数组索引,使用 C++ <random>
库而不是 C rand()
函数。并且不要做using namespace std
.
相关文章:
- 在黑客地球上没有获得以下C ++代码问题的输出
- VS 代码C++问题
- 插入操作的二叉搜索树代码问题
- 如何在代码问题中解决此问题 代码强制
- 发送和十六进制消息时套接字代码C++问题
- 代码问题将字符串转换为图表执行
- C 代码问题?编译器问题?代码块
- 代码问题.使用矢量删除相同的数字,除了它的最后一个入口
- 迭代列表以查找元素的出现.代码问题
- 使用JNI从Java调用本机(C++)函数时发生访问冲突:这是我的代码问题,还是已知问题
- XCode 4.5简单的OpenGL C 代码问题
- 在VS 2010上使用boost::interprocess生成代码问题
- 简单代码问题-未定义标识符
- 基本的c++代码问题
- 识别C++代码问题
- C++角色战斗代码问题
- OpenScenegraph 示例代码问题
- PortAudio示例代码问题
- 关于cout和cin的c++简单代码问题
- 关于歧义排列的代码问题