필자는 라이브러리를 만들고 있는데, 포인터 구문을 이해한다고 생각했을 때 혼란스러워지고 웹 검색을 통해 더욱 혼란스러워집니다. C로 포인터로 풀을 만들려면 어떻게해야합니까?
다음 사항
존중해야합니다 :
는 기본적으로 나는 풀을 만들고 싶어, 여기에 내가 실제로하고 싶은 것입니다
- 나는 객체를 추가 할 때 풀에 객체에 대한 현재 배열의 포인터는 (새 객체를 포함하기 위해) 새 포인터 배열 +1에 추가됩니다.
- 새 배열은 내 foo 구조의 "objects"로 지정됩니다.
- 이전 어레이는 무료입니다. 내가 정리 함수를 호출 할 때
- 는 풀의 모든 객체는 는
가 어떻게 내 구조를 정의한다를 free되기를입니까? 객체의 유형을 사전에 알 수없는 풀에 추가, 그래서 내가해야 무효가 모든 포인터를 처리합니다
void myc_pool_init()
{
the_pool = (???)malloc(sizeof(???));
the_pool->n = 0;
the_pool->objects = NULL;
}
void myc_push_in_pool (void* object)
{
if (object != NULL) {
int i;
(???)new_pointers;
the_pool->n++;
new_pointers = (???)malloc(sizeof(???)*the_pool->n);
for (i = 0; i < the_pool->n - 1; ++i) {
new_pointers[i] = (the_pool->objects)[i]; // that doesn't work (as I'm not sure how to handle it)
}
new_array[i] = object;
free(the_pool->objects);
the_pool->objects = new_array; // that must be wrong
}
}
void myc_pool_cleanup()
{
int i;
for (i = 0; i < the_pool->n; ++i)
free((the_pool->objects)[i]); // as in myc_push_in_pool, it doesn't work
free(the_pool->objects);
free(the_pool);
}
참고 : 여기
typedef struct {
int n;
(???)objects
} foo;
foo *the_pool;
내 수영장을 관리하는 코드이다 모든 의견은 매우 환영받을 것입니다.
C가 이런 유형의 제네릭 프로그래밍을 사용했다면 [qsort] (http://pubs.opengroup.org/onlinepubs/009695399/functions/qsort.html)가 콜백 함수 대신 width 인수? – Sebivor
@GrijeshChauhan이 책은 첫 번째 페이지에서 "객체 지향 만이 프로젝트 간 코드 재사용을 허용합니다"라고 말합니다. 말도 안되는 소리! 이 저자는 매우 혼란 스럽습니다. 객체 지향없이 코드 재사용이 불가능한 경우 하스켈에서 추상화를 설명하십시오. – Sebivor
Ted Jensen의 "C의 배열과 포인터에 관한 튜토리얼"(http://home.earthlink.net/~momotuk/pointers.pdf)을 살펴보고 Steve Summit의 [ "Introductory C programming" (http://www.eskimo.com/~scs/cclass/cclass.html). 날짜가 있지만 어쨌든 여기에 묻기 전에 반드시 읽어야합니다. – vonbrand