我需要创建其中姓氏是动态的父动态数组。 但是我收到有关读取字符串字符错误的错误。
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;
答案 0 :(得分:1)
您的代码有点连线,因为您混合使用数据结构parent_in
和parentsArray
及其条目;你在一个上使用malloc,在另一个上使用它(例如关于parent_in
)。
但是关于你的错误,我立即看到了两个主要问题:
您将字符串扫描为未初始化的指针,即scanf("%s %d", &parentsArray[numOfParents]->lastname, ...
。请注意,您可能为父结构保留了空间;这个结构有一个指向lastname
的指针,它本身并没有“malloced”。
您(重新) - 始终分配相同数量的条目,即1
in
parentsArray = (parent**)realloc(parentsArray, 1 *
sizeof(parent*))
。你可能意味着realloc(parentsArray,
(numOfParents+1) * sizeof(parent*))
。
我认为第1点是你“读取字符串字符的错误”的原因;如果你克服了这一点,我相信第2点会导致下一次内存损坏。