结构数组擦除数据

我尝试用调用函数的循环填充结构数组。 每当我循环不止一次,第一个条目从上次调用中删除第一个条目时,我怀疑它与CALLOC()函数有关,但不确定是否需要帮助。 这是函数:

HOUSE setHouse(int count,HOUSE *house) {
    int max = 20;
    printf("Enter Family(%d) name (%d charecter max):\n",count + 1,max);
    char *familyName = calloc(max,sizeof(char));
    if(familyName != NULL) {
        scanf("%s",familyName);
        house -> name = familyName;
        free(familyName);
    } else {
        printf("Allocation faild\n");
        house -> name = NULL;
    }
    printf("Enter house number:\n");
    scanf("%d",&house -> adress);  
    printf("Enter number of rooms:\n");
    scanf("%d",&house -> rooms);    
    printf("Enter size of house (in sqMt sss.ss format):\n");
    scanf("%f",&house -> sqMeters);
    return *house;
}

这是对函数的调用:

int nHouses = 0;
    printf("Number of houses in your street: ?\n");
    scanf("%d",&nHouses);
    HOUSE myHouse[nHouses];
    for (int i = 0; i < nHouses; i++) {
        setHouse(i,&myHouse[i]);
    }

这里是经过两次迭代的结果示例: 在第一个迭代中给出姓氏'a',在第二个迭代中给出姓氏'b'。

Family  Number  Rooms   Size
a       1       1       1.00
        1       1       1.00

谢谢。

zhuzhu224 回答:结构数组擦除数据

这是错误:

if__name__

在将指针分配给 initial begin rst = 1; #500; rst = 0; #100; MemRead = 0; MemWrite = 1; Addr = 32'd0; WriteData = 32'd123; 之后,您直接调用if(familyName != NULL) { scanf("%s",familyName); house -> name = familyName; free(familyName); } else { printf("Allocation faild\n"); house -> name = NULL; } ,因此,您之后有一个指向已释放的内存的指针,并且该访问会调用未定义的行为

相反,您可以创建一个类似

的循环
free(familyName)

当您不再需要整个数组时调用该函数

本文链接:https://www.f2er.com/3150328.html

大家都在问