我正在尝试分配一个struct数组.当我尝试初始化一个值并在函数中打印值时,一切正常.当我在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
Run Code Online (Sandbox Code Playgroud)
这是我的结构.
typedef struct
{
int worker;
int weeks;
PERSON *pAry;
}HEADER;
Run Code Online (Sandbox Code Playgroud)
这是主要的:
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;
Run Code Online (Sandbox Code Playgroud)
我想你需要改变这行代码:
HEADER header = {worker, salesWeek, list};
pHead = &header;
Run Code Online (Sandbox Code Playgroud)
成为:
HEADER header = {worker, salesWeek, list};
*pHead = header;
Run Code Online (Sandbox Code Playgroud)
还要确保pHead不为null否则返回错误null参数.如果你想动态,然后使用calloc分配头变量,那么你可以使用你的旧代码.
在你的main函数中确保这一行
HEADER *pHead;
Run Code Online (Sandbox Code Playgroud)
改为
HEADER *pHead = (HEADER*)calloc(1, sizeof(HEADER));
Run Code Online (Sandbox Code Playgroud)
也别忘了释放它.