마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 상에서 구조체 / malloc / 포인터 구현 관련 질문

0 추천
c 코드
 
typedef struct list_s
{
  unsigned int size;
  unsigned int max;
  unsigned int dim;
  double * values;
} * a_list;
 
static a_list new_list(unsigned int dim)
{
  a_list a;
 
  /* check parameters */
  if( dim == 0 ) error("'dim' must be positive.");
 
  /* get memory for list structure */
  a = (a_list) malloc( sizeof(struct list_s) );
  if( a == NULL ) error("not enough memory.");
 
  /* initialize list */
  a->size = 0;
  a->max = 1;
  a->dim = dim;
 
  /* get memory for list */
  a->values = (double *) malloc( dim*a->max * sizeof(double) );
  if( a->values == NULL ) error("not enough memory.");
 
  return a;
}

 

 

static void enlarge_list(a_list a)
{
  /* check parameters */
  if( a == NULL || a->values == NULL || a->max == 0 )
    error("enlarge_list: invalid.");
 
  /* duplicate number of tuples */
  a->max *= 2;
 
  /* realloc memory */
  a->values = (double *) realloc( (void *) a->values,
                      a->dim * a->max * sizeof(double) );
  if( a->values == NULL ) error("not enough memory.");
}
 
이런 C 코드를 안드로이드 스튜디오에서 만들어보려고 합니다.
 
문제가 되는 부분이 포인터를 구현하는 것과 malloc / realloc 구현인데요.
struct 부분을 이런 식으로 짜려고 하는데 도무지 감이 안잡혀서 질문 드립니다.
현재 문제가 되는 부분은
1. unsigned int 를 어떻게 처리할 것인가?
2. 포인터 부분을 어떻게 처리할 것인가?   (Cursor를 이용????)
3. new_list에서 malloc는 안드로이드에서 어떤 식으로 이용하는가?
4. realloc를 통해서 values를 확장해야 하는데 안드로이드에서는 어떻게 해야 하는가?
 
입니다.
검색으로도 충분히 찾을 수 있는 내용이라면 검색어를 뭐로 했을 때 나오는지 알려주시면 감사하겠습니다..
 
public class a_list{
        int size;
        int max;
        int dim;
        double[] values;
    }
 
    static a_list new_list(int dim){
        a_list a;
 
        // if 구문 부분은 일단 생략
 
        // malloc 생략
        // if 구문 생략
 
        a.size = 0;
        a.max = 1;
        a.dim = dim;
 
        // malloc 생략
        // if 구문 생략
 
        return a;
    }
 
    static void enlarge_list(a_list a){
        
        // if 구문 생략
        
        a.max *= 2;
        
        // memory realloc 생략
        
        // if 구문 생략
    }

 

마트상 (290 포인트) 님이 2015년 7월 1일 질문

2개의 답변

0 추천
그...안드로이드 프로그래밍개념이 전혀 없으신 것 같습니다.

안드로이드는 java로 코드를 짭니다.

따라서 안드로이드 책을 한권 아무거나 사셔도 질문에 대한 답이 될 것이고,

안드로이드에서 C를 사용하는 방법은 고급 기법중하나로 NDK라이브러리를 빌드하는 겁니다.
익명사용자 님이 2015년 7월 1일 답변
0 추천
C언어에서는 리스트 구조를 직접 만들어 썼지만, 자바에서는 언어 자체가 제공을 합니다.

따라서 리스트를 구현하기 위해서 어떤 것들이 필요한가라는 질문은 무의미해집니다.

그냥 제공되는 걸 쓰시면 됩니다. ArrayList 같은 걸 써서, add해버리면 끝입니다. (검색어는 java ArrayList 정도면 되겠네요)

메모리 realloc이니 free니 이런 부분은 신경쓰지 않아도 됩니다. VM이 처리하는 부분입니다.
cc1232 (35,280 포인트) 님이 2015년 7월 2일 답변
...