计数排序输出问题:读取访问冲突
Counting sort output problem: read access violation
我正在尝试计算排序算法。程序在使用调试器时运行,但问题是它输出的内容。输出值在视觉工作室中为 -842150451。我不确定为什么我会得到这个值。我也得到了这个弹出窗口:
"引发未处理的异常:读取访问冲突。
C是0x34B6F822。发生了">
我做错了什么?
这是代码
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void count(int A[], int B[], int k, int n) {
int i;
int j;
int* C = new int[k];
for (i = 0; i < k+1; i++) {
C[i] = 0;
}
for (j = 1; j <= n; j++) {
C[A[j]]++; // this is where the 0x34B6F822 error is
}
for (i = 1; i <= k; i++) {
C[i] += C[i - 1];
}
for (j = n; j >= 1; j--) {
B[C[A[j]]] = A[j];
C[A[j]] = C[A[j]] - 1;
}
}
int main()
{
int A[] = { 6,5,8,4,3 };
int n = sizeof(A) / sizeof(*A);
int k = 0;
for (int i = 0; i < n; i++) {
if (A[i] > k)
k = A[i];
}
int* B = new int[n];
int j;
for (j = 0; j < n; j++)
printf("%d ", B[j]);
printf("n");
count(A, B, k, n);
return 0;
}
C 有 k 个元素,索引从 0 到 k - 1。但是,A 中的最大值等于 k。因此,在某些时候,您正在访问 C[k],它指向您不拥有的内存。
你的代码中有两个问题。
第一:数组C
较小,只能存储从0
到k-1
k
元素,因此无法存储A
数组的最大元素。数组C
的大小将int* C = new int[k+1];
第二:当您计算A
数组的频率时C
那段时间,您正在运行从1
到n
而不是0
到n-1
的循环,这可能会导致错误,因为数组的大小 'Ais '0-based
索引的。您在填充循环的数组时犯B
类似的错误应该从n-1
运行到0
。
这是正确的,它将完美运行。
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void count(int A[], int B[], int k, int n) {
int i;
int j;
int* C = new int[k+1];
for (i = 0; i < k+1; i++) {
C[i] = 0;
}
for (j = 0; j <n; j++) {
C[A[j]]++; // error is removed
}
for (i = 1; i <= k; i++) {
C[i] += C[i - 1];
}
for (j = n-1; j >= 0; j--) {
B[C[A[j]]-1] = A[j];
C[A[j]] = C[A[j]] - 1;
}
}
int main()
{
int A[] = { 6,5,8,4,3 };
int n = sizeof(A) / sizeof(*A);
int k = 0;
for (int i = 0; i < n; i++) {
if (A[i] > k)
k = A[i];
}
int* B = new int[n];
int j;
count(A, B, k, n);
for (j = 0; j < n; j++)
printf("%d ", B[j]);
printf("n");
return 0;
}
相关文章:
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 读取访问冲突.这0xCDCDCDCD
- 尝试通过共享指针使用变量时读取访问冲突
- C++ 读取访问冲突,0xCDCDCDCD
- 从二进制文件中读取元素时引发异常(引发异常:读取访问冲突. _Pnext 0xB414D4)
- 使用智能指针读取访问冲突
- 引发异常:读取访问冲突.**此**0x40错误
- 函数 AfxEndThread 中的读取访问冲突"pThread-> was nullptr"
- Visual Studio图形调试器引发读取访问冲突异常
- C++中的内存分配(引发异常:读取访问冲突)
- 引发异常:读取访问冲突 [C++]
- 尝试从单向链表C++中删除单个节点时出现读取访问冲突
- 引发未经处理的异常:简单 C++ 程序中的读取访问冲突,动态增加数组长度以存储数字
- 错误 : 异常 : 引发未处理的异常: 读取访问冲突.0xDDDDDDDD临时温度
- 读取访问冲突. _Mycont 在 C++ 中将 udp 数据放入向量时出现 nullptr 错误
- 读取访问冲突0xCDCDCDCD
- Vector::p ush_back() 给出读取访问冲突
- 访问共享内存时出现读取访问冲突
- 挂钩创建文件抛出异常:读取访问冲突
- 不能对基于数组的指针使用数组运算符(读取访问冲突)