常数指针数组,其结构字段可能指向malloc分配的字段?

常数指针数组,其结构字段可能指向malloc分配的字段?,c,C,代码编译,但由于分段错误而不断失败,在我的fgets中似乎失败了?或者我的马洛克,我做错了什么?我真的不明白 另外,你将如何在一个特定的时间内释放这些内存 int main() { Employee *array[SIZE]; //Employee is a typedef struct --includes char *name, DATE *dateOfBirth, DATE is also a typedef struct, has 3 int fields month,

代码编译,但由于分段错误而不断失败,在我的fgets中似乎失败了?或者我的马洛克,我做错了什么?我真的不明白

另外,你将如何在一个特定的时间内释放这些内存

int main() {    
    Employee *array[SIZE]; //Employee is a typedef struct --includes char *name, DATE *dateOfBirth, DATE is also a typedef struct, has 3 int fields month, day, year,`  

fillArray(array, &count, fpin1, fpin2);

freeMemory(array, int count);

}  

fillArray(Employee *array[], int *count,  FILE *fpin1, FILE *fpin2)  
    char buffer[MAX], buffer2[MAX];  
    while (fgets(buffer, MAX, fpin1) != NULL && fgets(buffer2, MAX, fpin2) != NULL){  
        array[*count]->name = (char *) malloc(sizeof(char)*25);  
        assert(array[*count]->name != NULL);  
        strncpy(array[*count]->name, buffer, 15);  

        strncpy(buffer2, temp, 2);
        array[*count]->dateOfBirth->day = atoi(temp)
}
功能?

应为:

freeMemory(Employee *array[], int count)
您没有在任何地方分配
Employee
对象,因此数组[0]指向某个随机地址

int main() {    
    Employee array[SIZE]; //Employee is a typedef struct --includes char *name, DATE *dateOfBirth, DATE is also a typedef struct, has 3 int fields month, day, year,`  

fillArray(&array, &count, fpin1, fpin2);

freeMemory(&array, int count);

}  
这是一个存储指向
Employee
structs的指针的数组

我想你是说

Employee* array[SIZE];
array[*count]
除了看起来很奇怪之外,总是修改相同的索引。您从未在任何地方修改过
*count

此代码不会检查您是否超过传递的
数组的界限

另外:对于
freemory()

freemory(雇员*数组[],整数计数)
{
int i=0;
而(我<计数)
{
自由(数组[i]);
数组[i]=NULL;
++一,;
}  
}

我建议将
malloc
和分配分开。由于您在同一行中具有阵列访问权限,这两种情况都可能导致出现
segfault
。还有,为什么不在各处放置一些
printf
s以进行调试呢?到处都是printf语句,但我仍然被困得很难……过了一段时间就要死了——这没有意义,因为它只是一个fgets函数,如果我能设法让它通过malloc之后的分段故障。如果我注释掉malloc并让它做一些简单的事情(在结构的一个字段中输入一个int),它最终会遍历文件,然后再次执行segfults。“count”是main中定义的int,作为指针传递给fillarray,因此它可以递增以显示雇员的数量,然后用于创建输出文件。Employee array不是吗[尺码];在编译时分配内存?
#通过way@Wilson11:它将
SIZE
指针数组分配给
Employee
。它不分配
SIZE
结构。此外,您可能希望结构的
dateOfBirth
成员只是
DATE
而不是指向
DATE
,因为它是一个固定的大小,您不想为每个元素分配它。我如何为它分配内存,因为它是一个常量指针,我不能触摸main方法或具有结构定义的.h文件。@Wilson11:您也必须对它进行malloc处理。请查看@Muggen的代码,了解如何对它进行malloc处理
Employee
struct,然后是
name
dateOfBirth
的malloc空间。您忘记了malloc
dateOfBirth
,而
freemory()
函数需要在释放
array[i]>dateOfBirth
array[i]>name
之前释放
@tomlogic,哦,这是正确的。但是现在我认为OP会看到逻辑。
fillArray(Employee* array[], int* count,  FILE *fpin1, FILE *fpin2)
{
    char buffer[MAX], buffer2[MAX];
    int i = 0;
    while ( fgets(buffer, MAX, fpin1) != NULL && 
            fgets(buffer2, MAX, fpin2) != NULL )
    {
        // the array does not hold any valid memory address.
        array[i] = malloc( sizeof(Employee) );
        assert( array[i] != NULL );

        // now on the new employee add some char memory
        (array[i])->name = malloc( sizeof(char) * 25 );
        assert(array[i]->name != NULL);

        strncpy(array[i]->name, buffer, 15);
        strncpy(buffer2, temp, 2);

        array[i]->dateOfBirth->day = atoi(temp)

        ++i;
        (*count)++; 
    }  
}
freeMemory(Employee* array[], int count)
{
    int i = 0;
    while( i < count )
    {
        free(array[i]);
        array[i] = NULL;
        ++i;
    }  
}