구조체의 배열을 할당하려고합니다. 값을 초기화하고 함수 내에서 값을 인쇄하려고하면 모든 것이 잘됩니다. 가서 main에 같은 값을 출력하면 프로그램이 다운됩니다.C를 사용하는 구조체의 동적 할당
void getHeader(FILE* fpFile, HEADER *pHead)
{
// Local Declaration
int worker, salesWeek, i;
PERSON *list;
// Statement
fscanf(fpFile, "%d %d", &worker, &salesWeek);
list = aloPerson(worker);
HEADER header = {worker, salesWeek, list};
pHead = &header;
return;
}// getHeader
PERSON* aloPerson(int worker)
{
// Local Declaration
PERSON *list;
// Statement
list =(PERSON*)calloc(worker, sizeof(PERSON));
if(list == NULL)
{
MEM_ERROR, exit(103);
}
return list;
}// aloPerson
이것은 내 구조체입니다.
typedef struct
{
int worker;
int weeks;
PERSON *pAry;
}HEADER;
이 메인입니다 :
HEADER header = {worker, salesWeek, list};
pHead = &header;
가 될 :
HEADER header = {worker, salesWeek, list};
*pHead = header;
또한
확인 pHead을
int main (void)
{
// Local Declaration
FILE* fpFile;
char nameIn[25];
char *endPro = "end";
HEADER *pHead;
// Statement
printf("Please select file to to open.\nsales or sales_2: ");
scanf("%s", nameIn);
FLUSH;
do
{
valiFile(nameIn);
fpFile = openFile(nameIn);
getHeader(fpFile, pHead);
readFile(fpFile, pHead);
repeat(nameIn);
}
while(strcmp(nameIn, endPro) != 0);
return 0;
로컬 스택에 할당 된 구조체에 대한 포인터를 다시 전달하기 때문입니다. 동적으로 헤더를 할당해야합니다. – Nick
getHeader는 메모리 누수와 현재 상태의 일부 콘솔 IO를 나타냅니다. 아마 당신이 찾고있는 것이 아닙니다. – WhozCraig
@ 닉 다시 한번 확인해보세요. 그는 그걸 돌려 보내지도 않습니다. – WhozCraig