로건 라카이 좋은 답변을 가지고 있지만, 내 경험에 따르면 이 아니라면이 아닌 경우 가능한 경우 동적 할당 메모리를 반환하는 것이 다른 방법을 제시하고자합니다.
더 유연한 디자인은 포인터와 배열 크기를 허용하는 함수를 작성하는 것입니다.
또한 유지해야하는 장기 프로젝트를 작성할 때 (아마도 자신뿐만 아니라 다른 프로그램에서도 마찬가지 일 것입니다.) "관심사"를 함께 유지하는 것이 좋습니다.
좋은 예는 메모리 관리 (free
)가 호출 함수에 의해 수행 될 때 메모리 할당 (malloc
)이 동일한 호출 함수에서 수행되는 것이 더 낫다는 것입니다 ... 메모리 관리 문제를 다른 기능을 사용하면 향후 유지 보수 담당자가 코드에 메모리 누수를 일으킬 가능성이 커집니다.
이 경우 스택 또는 malloc
을 사용하여 Array를 할당하고 함께 전달하는 것이 매우 간단합니다.
즉 메모리 관리 문제를 호출 함수 (main
)로 옮기는 데 사용할 수있는 빠른 (다소 쓸모없는) 예가 있습니다. 배열 관련 함수를 호출 할 때 동적 메모리 할당과 스택 할당을 모두 사용할 수 있습니다.
size_t get_array_size(void /* or any parameters */) {
/* do whatever you need */
return 10; /*for our example */
}
void fill_array(int *arry, size_t size) {
while (size) {
size--;
arry[size] = 1; /* fill in data here */
}
}
int use_array(int *arry, size_t size) {
fprintf(stderr, "***\n");
while (size) {
size--;
arry[size] -= 1; /* do whatever */
fprintf(stderr, "array[%lu] == %d\n", size, arry[size]);
}
return 0; /* or return -1 for error */
}
int main(int argc, char const *argv[]) {
int array1[20];
int *array2;
size_t array2_size = get_array_size();
array2 = malloc(sizeof(*array2) * array2_size);
fill_array(array1, 20);
fill_array(array2, array2_size);
if (use_array(array1, 20))
perror("WTF?! "), exit(0);
if (use_array(array2, array2_size))
perror("WTF?! "), exit(0);
return 0;
}
그건 제 2 ¢입니다. 내 오류 관리 코드가 다소 비뚤어 질 수도 있지만 오류가 발생하면 -1
을 반환하는 것이 더 일반적입니다.
왜 전역 배열을 선언합니까? 함수에 배열을 넘겨 주면 포인터로 변환되어 매우 간단 해집니다. 'int' 배열의 경우'void func (int * array, size_t length)'...를 시도해 볼 수 있습니다. 그냥 배열을 편집하면됩니다. – Myst
C에는 '클래스의 – user3629249