동적 배열 객체를 사용하여 클러스터를 만들려고합니다.C - 구조체 내에서 동적 배열에 액세스
구조체의 정의는 다음과 같다 : 클러스터에 객체를 추가하기위한
struct obj_t {
int id;
float x;
float y;
};
struct cluster_t {
int size;
int capacity;
struct obj_t *obj;
};
함수이다
void append_cluster(struct cluster_t *c, struct obj_t obj)
{
if(c->capacity < (c->size + 1))
{
c = resize_cluster(c, c->size + 1);
}
if(c == NULL)
return;
c->obj[c->size] = obj; //at this point program crashes.
c->size++;
}
EDIT : 여기 resize_cluster는() 함수 :
struct cluster_t *resize_cluster(struct cluster_t *c, int new_cap)
{
if (c->capacity >= new_cap)
return c;
size_t size = sizeof(struct obj_t) * new_cap;
void *arr = realloc(c->obj, size);
if (arr == NULL)
return NULL;
c->obj = (struct obj_t*)arr;
c->capacity = new_cap;
return c;
}
EDIT 2 : 다음은 클러스터 초기화입니다.
void init_cluster(struct cluster_t *c, int cap)
{
c = malloc(sizeof(struct cluster_t));
c->size = 0;
c->capacity = cap;
c->obj = (struct obj_t*)malloc(cap * sizeof(struct obj_t));
}
클러스터의 배열에 개체를 추가하려고 할 때 프로그램이 충돌하는 이유를 알 수 없습니다. 배열에 이런 식으로 액세스하는 것이 잘못 되었습니까? 그렇다면 어떻게 접근해야합니까?
우리가 (see'resize_cluster 수)'? –
어떻게 cluster_t를 초기화합니까? – EdmCoff
디버깅 도움말을 찾는 질문 ("이 코드가 작동하지 않는 이유는 무엇입니까?")에는 원하는 동작, 특정 문제 또는 오류 및 질문 자체에서이를 재현하는 데 필요한 가장 짧은 코드가 포함되어야합니다. 분명한 문제 성명이없는 질문은 다른 독자에게 유용하지 않습니다. 참조 : [mcve]를 만드는 방법. – AndyG