2014-01-06 2 views
0

다음을 생성해야합니다. 특정 순서없이 반복되는 값없이 어떤 종류의 항목이라도 수에 관계없이 초기화되는 일반 유한이지만 동적 집합입니다. 집합에 대한 동적 배열 만들기

그래서 나는 (기본적으로 설정) 배열을 보유하고 구조체와 세트의 이름을 작성하여 시작 :

typedef struct set{ 

    char name; /* A unique identifier for every set */ 
    int value[]; /* A dynamic array of integers; the set */ 

} Set; 

내가 인터페이스 역할을 헤더 파일에 넣고.

지금 구현 수준에 머물러 있습니다. 기본적으로 함수를 만들어야합니다.

create() 

그러나 [] 동적 배열을 만드는 방법을 모르겠습니다. malloc을 사용해야한다는 것을 알고 있지만 혼란 스럽습니다. 어떤 도움을 크게 감상 할 수

Set * create() 
{ 
    Set S; 
    int n; 
    int * ptd; 

    S.value * ptd = (int *) malloc(n * sizeof(int)); 
} 

:

나는 아무 소용이 코드를 시도했다. 감사!

+0

"이 코드를 사용하지 않으려 고 시도했습니다." 그게 뭐가 잘못 되었 니? 컴파일 오류? 예상과 다른 결과가 있습니까? –

+0

'n '의 값은 무엇입니까? 'n'이 0이면 'n * anything'은 0이고, 'malloc' **은'NULL '을 반환 할 수 있습니다. 또 다른 문제는'create' 함수가 어떤 값도 반환하지 않는다는 것입니다. 유효한'Set *'을 반환하기 위해서는'Set' 자체를 스택에 자동으로 할당하는 것이 아니라'malloc'을 사용하여 힙에 할당해야합니다. – jweyrich

답변

0

재정 :

typedef struct set{ 

    char name; /* A unique identifier for every set */ 
    int *value; /* A dynamic array of integers; the set */ 
    int numberOfValues; /* The number of actual values currently in the set */ 
    int sizeOfArray; /* The number of elements allocated (must be >= numberOfValues) */ 

} Set; 

create 반환 값이 필요하고, 또한, 동적 집합 구조 자체를 할당 할 필요가있다. 다음과 같이 create 수정 :

Set * create() 
{ 
    Set *S; 

    S = malloc(sizeof(Set)); 
    S->name = NULL; 
    S->numberOfValues = 0; 
    S->sizeOfArray = 32; 
    S->value = malloc(S.sizeOfArray * sizeof(int)); 
    return S; 
} 

한 세트에 무언가를 추가 할 때마다, 당신은 S.sizeOfArray 새로운 요소를 포함하기에 충분히 큰 있는지 확인해야합니다. 그렇지 않은 경우 S.value을 다시 할당하고 S.sizeOfArray에 새 크기를 저장해야합니다. 또한 세트에 요소를 추가 할 때마다 S.numberOfValues을 증가 시키십시오!

+0

정말 도움이 됐어, 고마워! –

+0

@ user3166304 그것은 당신을 위해 일한 것을 기쁘게 생각합니다.당신이 그것을 좋아한다면 내 대답을 upvote 수 있습니다 :) –

0

구조체에 int*을 선언하지 않는 이유는 무엇입니까?

int *value; /* A dynamic array of integers; the set */ 

그리고 사용하여 메모리를 할당 ...

S.value =malloc(n * sizeof(int)); 
+0

불완전합니다. 그게 유일한 문제는 아닙니다. –

+0

@MadPhysicist 그 밖의 무엇을 완성해야합니까? 나는 또한 나중에 설명 된대로 할당했다. –

+0

'S.value * ptd = (int *) malloc (n * sizeof (int));'컴파일되지 않는다 –

-1

당신이 문자열을 만드는 것처럼 포인터 배열을 사용할 필요가 동적 배열을 만듭니다. 문자열은 기본적으로 char의 동적 배열이므로 char * msg = "Hello"와 같은 작업을 수행 할 수 있습니다. int도 마찬가지입니다. 구조체에서 요소가 반복되지 않도록 제어하려면 Contains 메서드를 구현하고 Add! Contains (x)를 추가해야합니다. 동적 포인터를 갖도록 설정

관련 문제