#include <stdio.h>
void fsort(int* a, int n, int max)
{
int i;
int* f = calloc(max + 1, sizeof(int)); // 도수 분포표 배열 f
int* b = calloc(n, sizeof(int)); // 임시 저장 배열 b
for (i = 0; i < n; i++) f[a[i]]++; // 도수 분포표 생성
for (i = 1; i <= max; i++) f[i] += f[i - 1]; // 누적 도수 분포표 생성
for (i = n - 1; i >= 0; i--) b[--f[a[i]]] = a[i]; // 임시 배열 b에 정렬 시행
for (i = 0; i < n; i++) a[i] = b[i]; // 원본 배열 a에 임시 배열 b를 대입
free(f);
free(b);
}
int main(void)
{
int i;
int n, max;
int a[] = { 1,7,8,3,5,4,3,1,5,7,7,3 };
n = sizeof(a) / sizeof(a[0]);
max = 10;
for (i = 0; i < n; i++)printf("%d ", a[i]);
printf(" ");
fsort(a, n,max);
for (i = 0; i < n; i++)printf("%d ", a[i]);
printf(" ");
return 0;
}
fsort 함수 내에서 int* b = calloc(n, sizeof(int)); 선언할때 calloc을 malloc으로 바꾸니까 제대로 실행이 안되는데 왜그런거임?
어차피 뒤이어 따라오는 for (i = n - 1; i >= 0; i--) b[--f[a[i]]] = a[i]; 구문에서 b의 모든 공간에 대입을 실행하니까 malloc으로 써도 상관없는거 아냐?
calloc을 malloc으로 바꾸니 실제로 코드 실행이 안되니까 뭔가 문제는 맞는거같은데 왜그런지 모르겠음;;
malloc으로 어떻게 바꿨단건지 코드를 써봐
int* b = calloc(n, sizeof(int)); 을 int* b = malloc(n, sizeof(int)); 로 바꾸었더니 제대로 실행이 안됨. 바꾼건 단지 저거 하나뿐
malloc은 인자 하나 받아서 malloc(n * sizeof(int))로 써야한다. 설마했는데 이걸 확인 안 하고 썼을 줄이야.
날 때려죽여줘...
어째서... malloc 매개변수가 2개라고 착각하고 있었던거지 나..?
고마워..