带动态字符串的动态数组。读取字符串字符的错误

时间:2017-01-14 17:51:33

标签: c

我需要创建其中姓氏是动态的父动态数组。 但是我收到有关读取字符串字符错误的错误。

parent ** getParents(){
    parent parent_in;
    parent** parentsArray=NULL;
    char answer;
    int i, numOfParents=0,fExit=0;

    do
    {
        printf("Do you wan't to enter parent? Y/N\n");
        flushall();
        scanf("%c", &answer);
        if (answer == 'N')
        {
            fExit = 1;
        }
        else
        {

            parent_in.lastname = (char*)malloc(20 * sizeof(char));

            parentsArray = (parent**)realloc(parentsArray, 1 * sizeof(parent*));
            parentsArray[numOfParents] = (parent*)calloc(1, sizeof(parent));

            printf("Please enter the lastname and num of childrens\n");
            scanf("%s %d", &parentsArray[numOfParents]->lastname, &parentsArray[numOfParents]->numOfChildren);

            numOfParents++;
            free(parent_in.lastname);
        }
    } while (fExit == 0);

    return parentsArray;
}

这是父母的结构:

struct Parents{
    char *lastname;
    int numOfChildren;
}typedef parent;

1 个答案:

答案 0 :(得分:1)

您的代码有点连线,因为您混合使用数据结构parent_inparentsArray及其条目;你在一个上使用malloc,在另一个上使用它(例如关于parent_in)。

但是关于你的错误,我立即看到了两个主要问题:

  1. 您将字符串扫描为未初始化的指针,即scanf("%s %d", &parentsArray[numOfParents]->lastname, ...。请注意,您可能为父结构保留了空间;这个结构有一个指向lastname的指针,它本身并没有“malloced”。

  2. 您(重新) - 始终分配相同数量的条目,即1 in parentsArray = (parent**)realloc(parentsArray, 1 * sizeof(parent*))。你可能意味着realloc(parentsArray, (numOfParents+1) * sizeof(parent*))

  3. 我认为第1点是你“读取字符串字符的错误”的原因;如果你克服了这一点,我相信第2点会导致下一次内存损坏。