2012-04-09 5 views
0

나는 C에서 단순해야만하는 무언가를 겪고있다. 그러나 어떤 이유 때문에 그것을 작동시키지 못하는 것 같다.미리 구조체의 배열을 다른 구조체에 배치하려면 어떻게해야합니까?

#define MAX_BRANCH 500 
    #define MAX_BANK_CLIENTS 100000 
    #define MAX_CLIENTS 10000 


    typedef struct Client{ 
     char *pName; 
     char *fName; 
     int id; 
     int branch; 
     int AccountNum; 
     int credit; 
     double surplus; 
     double IOU; 
     double savings; 
    }Client; 

    typedef struct Branch{ 
     int BrnachNum; 
     char *Name; 
     int Accounts; 
     double sumOfAll; 
     double profit; 
     int ActiveLoans; 
     int Opened; 
     int Closed; 
     Client ClientList[MAX_CLIENTS]; 
    }Branch; 

    typedef struct Bank{ 
     char *Name; 
     int Branches; 
     int Accounts; 
     int ActiveLoans; 
     double sumOfAll; 
     double Profit; 
     Branch BranchList[MAX_BRANCH]; 
    }Bank; 




int main() 
{ 
    Bank Discount; 
    Discount.BranchList[0].Accounts = 1; 

    return 0; 
} 

// -------------------------------- :

다음은 구조체이다 ------------

이 간단한 정수 값을 정수 인수에 배치하면 스택 오버플로 또는 내부 필드 에 대한 다른 액세스가 표시되고 char 포인터는 다음과 같이 할당됩니다. strdup (내가 사용할 수있는 유일한 메모리 할당).

그리고 모든 종류의 메모리 할당을 사용할 수 없다는 사실을 명심하십시오.

둘째, 일부는 구조체의 정적 배열을 설정하라고 지시했습니다. 예 :

static Branch BranchList[500] 

그러나 각 가지에 대해 동일한 작업을 수행 할 수 있습니까?

+0

당신은 정말 숙제로이 태그를해야 사용하여 스택 크기를 증가 –

+1

을 시도하십시오 구조체에 몇 가지 포인터가 있고 메모리 할당을 사용할 수 없다고 말하면서 어떻게 설정했는지 궁금합니다. –

+0

아마도 초기화 문제 일뿐입니다. 항상 모든 초기화를 기본값 초기화 자'= {0}'로 초기화하십시오. –

답변

1

문제는 선언되기 전에 구조체를 사용하고있는 것으로 보입니다. 역순으로 정의 할 수 있습니다.

+0

그런데 왜 그렇게해야합니까? 그의 프로그램은 실제로 컴파일 오류를 유발합니다. –

+0

C에서 배열이 구현되는 방식 때문에 C에서는 배열이 연속 영역으로 자동 할당됩니다. 컴파일러에게'Bank' 구조체에'MAX_BRANCH'''''''을 할당하도록 요청하고 있지만,'Branch'는 아직 정의되지 않았기 때문에 컴파일러는 그 공간의 크기를 알지 못합니다. 그것을 위해 할당하십시오. 'Branch '의'Client'도 마찬가지입니다. 그건 그렇고, 내가 틀릴 수도 있습니다. 선언 순서를 변경하고 도움이되는지 확인하십시오. 그렇지 않으면이 대답을 삭제할 수 있도록 알려주십시오. –

+0

그랬습니다, 나는 그걸 역으로 복사하려고합니다. 구조체가 다른 헤더 파일에 들어 있다는 것을 알려 주기만하면됩니다. – lddmonster

0

먼저 compilation errors을 없애기 위해 구조체의 순서를 변경하십시오. 그리고 나서 스택 오버플로 문제에 와서, 실제로는 큰 배열을 사용하고 있습니다. 함수 내부에이 변수가 있으면 각각 의 모든 구조체에 하나의 변수 만 선언하면 모든 가능성이이됩니다.

정적으로 변환하면 은 스택이 아닌 데이터 섹션으로 밀어 넣기 때문에을 저장할 수 있습니다. 그러나 이것은 프로세스에 할당 된 데이터 섹션에 달려 있으며,이 섹션은 실행중인 시스템 (OS)에 따라 다릅니다.

그리고 당신이 한 번

,

static Branch BranchList[500]; 

모든 지점을위한 공간을 할당, 그래서 어디 각 지점의 질문은?

당신이 malloc을 배제하고 static 경우 문제를 해결되지 않기 때문에, u는 특히, 조금 더 많은 코드를 보여줄 수 ... setrlimit

+1

'setrlimit'의 사용을 요구하는 동적 할당을 배제한 엔트리 레벨 할당을 상상할 수는 없습니다 : –

+0

ha ha :) 사실, 그러나 OP는 그것에 대해 강경합니다. –

+0

정적 브랜치 BranchList [500]을하고있는 브랜치 구조체의 배열을 제공합니다. 배열의 각 블록에 Client Structs 배열이 있어야하고 내 질문에 어떻게해야합니까? – lddmonster

관련 문제