gpt4 book ai didi

计数排序 "core dumped"错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:54 24 4
gpt4 key购买 nike

我正尝试在 c 中实现计数排序算法,但我收到此 "core dumped" 编译器消息。有谁知道我的错误在哪里?

我需要对一个由外部文件中的数字填充的数组进行排序。

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include "arrayio.h"

int MAX_LAENGE = 1000;
int MAX_VALUE = 100;
void count_sort_calculate_counts(int input_array[], int len, int count_array[])
{
count_array = (int*)calloc(MAX_VALUE, sizeof(int));

for(int i = 0; i < MAX_VALUE; i++)
{
count_array[i] = 0;
}

for(int j = 0; j <= len; j++)
{
count_array[input_array[j]] = count_array[input_array[j]] +1;
}
}

void count_sort_write_output_array(int output_array[], int len, int count_array[])
{
int k = 0;

for(int i = 0; i < MAX_VALUE; i++)
{
for(int j = 0; j < count_array[i]; j++)
{
output_array[k] = i;
k = k + 1;
}
}
}

int main(int argc, char *argv[]) {

if (argc < 2){
printf("Aufruf: %s <Dateiname>\n", argv[0]);
printf("Beispiel: %s zahlen.txt\n", argv[0]);
exit(1);
}

char *filename = argv[1];

int input_array[MAX_LAENGE];
int len = read_array_from_file(input_array, MAX_LAENGE, filename);

printf("Unsortiertes Array:");
print_array(input_array, len);

int count_array[MAX_VALUE];
int output_array[MAX_LAENGE];

count_sort_calculate_counts(input_array, len, output_array);
count_sort_write_output_array(output_array, len, count_array);
printf("Sortiertes Array:");
print_array(output_array, len);

free(count_array);
return 0;
}

我想了好几天,但我无法解决。

最佳答案

这个循环:

for(int j = 0; j <= len; j++)
{
count_array[input_array[j]] = count_array[input_array[j]] +1;
}

超出 1 int 范围,因此读取 input_array[j] 超出了 input_array 范围。再读取一个很少会触发崩溃,但该值是完全随机的并且可能非常高,因此 count_array[input_array[j]] 访问一个非常远的地址,非常边界,因此崩溃。

修复建议(和小的简化):

for(int j = 0; j < len; j++)
{
count_array[input_array[j]] ++;
}

关于计数排序 "core dumped"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47434846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com