0

我正在尝试分配一个结构数组。当我尝试初始化一个值并在函数中打印该值时,一切正常。当我在 main 中打印相同的值时,我的程序崩溃了。

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;

这是主要的:

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;
4

1 回答 1

5

我认为您需要更改这行代码:

HEADER header = {worker, salesWeek, list};
pHead = &header;

成为:

HEADER header = {worker, salesWeek, list};
*pHead = header;

还要确保 pHead 不为空,否则返回错误空参数。如果你想动态然后使用 calloc 分配头变量,那么你可以使用你的旧代码。

确保在您的主要功能中,这条线

HEADER *pHead;

改为

HEADER *pHead = (HEADER*)calloc(1, sizeof(HEADER));

也不要忘记释放它。

于 2013-03-12T09:15:23.183 回答