#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;

}


viewimage.php?id=3dafdf21f7d335ab67b1d1&no=24b0d769e1d32ca73deb87fa11d02831de04ca5aee4f7f339edb1d2bd9437835f87fdc6bfe36499058a57f95d69ebd69d7f9641e8aa544532d7f78dc09e0e7d85798d28dbd3236



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으로 바꾸니 실제로 코드 실행이 안되니까 뭔가 문제는 맞는거같은데 왜그런지 모르겠음;;