计数排序(c语言)出现访问位置冲突

题目描述

在学习计数排序的过程中出现访问位置冲突

题目来源及自己的思路

相关代码

#include<stdio.h>
#include<string.h>
#include "fz.h"//包含structure函数来给数组生成随机数,print函数来打印数组
#define N 10
void main()
{
    int arr[N]={0}, max = arr[0];
    structure(arr, N, 9);//给数组赋随机数,范围在0-9开区间
    print(arr, N);//打印数组
    for (int i = 0; i < N; i++)//寻找最大值
    {
        if(arr[i]>max)
        max = arr[i];
    }
    int* count = (int*)malloc(sizeof(int)*(max+1));//计数数组count
    memset(count, 0, max+1);
    for (int i = 0; i < N; i++)//计数
    {
        count[arr[i]]++;
    }
    //int* count_2 = (int*)malloc(sizeof(max + 1));
    for (int i = 1; i < max+1; i++)//累计
    {
        count[i] += count[i - 1];
    }
    int* output = (int*)malloc(sizeof(int) * N);//输出数组
    for (int i = N-1; i >= 0; i--)
    {
        output[count[arr[i]] - 1]=arr[i];
        count[arr[i]]--;
    }
    for (int i = 0; i < N; i++)//把结果返回原数组
    {
        arr[i] = output[i];
    }
    print(arr, N);
    free(output);
    free(count);
} 

你期待的结果是什么?实际看到的错误信息又是什么?

在把结果放进输出数组中的时候VS报错,访问位置冲突
这一行代码 output[count[arr[i]] - 1]=arr[i];

阅读 1.1k
1 个回答
    int* count = (int*)malloc(sizeof(int)*(max+1));//计数数组count
    memset(count, 0, max+1);

memset 长度不对。应该是 sizeof(int)*(max+1)
可以使用 calloc 开辟 0 初始化的数组。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进